Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/issuable_export_csv_worker.rb')
-rw-r--r--app/workers/issuable_export_csv_worker.rb56
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')