diff options
Diffstat (limited to 'app/workers/issuable_export_csv_worker.rb')
-rw-r--r-- | app/workers/issuable_export_csv_worker.rb | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/app/workers/issuable_export_csv_worker.rb b/app/workers/issuable_export_csv_worker.rb index d91ba77287f..33452b14edb 100644 --- a/app/workers/issuable_export_csv_worker.rb +++ b/app/workers/issuable_export_csv_worker.rb @@ -7,47 +7,45 @@ class IssuableExportCsvWorker # rubocop:disable Scalability/IdempotentWorker worker_resource_boundary :cpu loggable_arguments 2 - PERMITTED_TYPES = [:merge_request, :issue].freeze - def perform(type, current_user_id, project_id, params) - @type = type.to_sym - check_permitted_type! - process_params!(params, project_id) - - @current_user = User.find(current_user_id) - @project = Project.find(project_id) - @service = service(find_objects(params)) + user = User.find(current_user_id) + project = Project.find(project_id) + finder_params = map_params(params, project_id) - @service.email(@current_user) + export_service(type.to_sym, user, project, finder_params).email(user) + rescue ActiveRecord::RecordNotFound => error + logger.error("Failed to export CSV (current_user_id:#{current_user_id}, project_id:#{project_id}): #{error.message}") end private - def find_objects(params) - case @type - when :issue - IssuesFinder.new(@current_user, params).execute - when :merge_request - MergeRequestsFinder.new(@current_user, params).execute - end + def map_params(params, project_id) + params + .symbolize_keys + .except(:sort) + .merge(project_id: project_id) end - def service(issuables) - case @type + def export_service(type, user, project, params) + issuable_class = service_classes_for(type) + issuables = issuable_class[:finder].new(user, params).execute + issuable_class[:service].new(issuables, project) + end + + def service_classes_for(type) + case type when :issue - Issues::ExportCsvService.new(issuables, @project) + { finder: IssuesFinder, service: Issues::ExportCsvService } when :merge_request - MergeRequests::ExportCsvService.new(issuables, @project) + { finder: MergeRequestsFinder, service: MergeRequests::ExportCsvService } + else + raise ArgumentError, type_error_message(type) end end - def process_params!(params, project_id) - params.symbolize_keys! - params[:project_id] = project_id - params.delete(:sort) - end - - def check_permitted_type! - raise ArgumentError, "type parameter must be :issue or :merge_request, it was #{@type}" unless PERMITTED_TYPES.include?(@type) + def type_error_message(type) + "Type parameter must be :issue or :merge_request, it was #{type}" end end + +IssuableExportCsvWorker.prepend_if_ee('::EE::IssuableExportCsvWorker') |