diff options
Diffstat (limited to 'app/services/admin/abuse_reports')
-rw-r--r-- | app/services/admin/abuse_reports/moderate_user_service.rb | 7 | ||||
-rw-r--r-- | app/services/admin/abuse_reports/update_service.rb | 32 |
2 files changed, 39 insertions, 0 deletions
diff --git a/app/services/admin/abuse_reports/moderate_user_service.rb b/app/services/admin/abuse_reports/moderate_user_service.rb index da61a4dc8f6..823568d9db8 100644 --- a/app/services/admin/abuse_reports/moderate_user_service.rb +++ b/app/services/admin/abuse_reports/moderate_user_service.rb @@ -61,10 +61,17 @@ module Admin def close_report return error('Report already closed') if abuse_report.closed? + close_similar_open_reports abuse_report.closed! success end + def close_similar_open_reports + # admins see the abuse report and other open reports for the same user in one page + # hence, if the request is to close the report, close other open reports for the same user too + abuse_report.similar_open_reports_for_user.update_all(status: 'closed') + end + def close_report_and_record_event event = action diff --git a/app/services/admin/abuse_reports/update_service.rb b/app/services/admin/abuse_reports/update_service.rb new file mode 100644 index 00000000000..36992e1aa25 --- /dev/null +++ b/app/services/admin/abuse_reports/update_service.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module Admin + module AbuseReports + class UpdateService < BaseService + attr_reader :abuse_report, :params, :current_user + + def initialize(abuse_report, current_user, params) + @abuse_report = abuse_report + @current_user = current_user + @params = params + end + + def execute + return ServiceResponse.error(message: 'Admin is required') unless current_user&.can_admin_all_resources? + + abuse_report.label_ids = label_ids + + ServiceResponse.success + end + + private + + def label_ids + params[:label_ids].filter_map do |id| + GitlabSchema.parse_gid(id, expected_type: ::Admin::AbuseReportLabel).model_id + rescue Gitlab::Graphql::Errors::ArgumentError + end + end + end + end +end |