summaryrefslogtreecommitdiff
path: root/app/services/issues/import_csv_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/issues/import_csv_service.rb')
-rw-r--r--app/services/issues/import_csv_service.rb61
1 files changed, 11 insertions, 50 deletions
diff --git a/app/services/issues/import_csv_service.rb b/app/services/issues/import_csv_service.rb
index 60790ba3547..bce3ecc8bef 100644
--- a/app/services/issues/import_csv_service.rb
+++ b/app/services/issues/import_csv_service.rb
@@ -1,64 +1,25 @@
# frozen_string_literal: true
module Issues
- class ImportCsvService
- def initialize(user, project, csv_io)
- @user = user
- @project = project
- @csv_io = csv_io
- @results = { success: 0, error_lines: [], parse_error: false }
- end
-
+ class ImportCsvService < Issuable::ImportCsv::BaseService
def execute
- process_csv
- email_results_to_user
-
- @results
- end
-
- private
-
- def process_csv
- csv_data = @csv_io.open(&:read).force_encoding(Encoding::UTF_8)
+ record_import_attempt
- csv_parsing_params = {
- col_sep: detect_col_sep(csv_data.lines.first),
- headers: true,
- header_converters: :symbol
- }
-
- CSV.new(csv_data, csv_parsing_params).each.with_index(2) do |row, line_no|
- issue_attributes = {
- title: row[:title],
- description: row[:description]
- }
-
- issue = Issues::CreateService.new(@project, @user, issue_attributes).execute
-
- if issue.persisted?
- @results[:success] += 1
- else
- @results[:error_lines].push(line_no)
- end
- end
- rescue ArgumentError, CSV::MalformedCSVError
- @results[:parse_error] = true
+ super
end
def email_results_to_user
Notify.import_issues_csv_email(@user.id, @project.id, @results).deliver_later
end
- def detect_col_sep(header)
- if header.include?(",")
- ","
- elsif header.include?(";")
- ";"
- elsif header.include?("\t")
- "\t"
- else
- raise CSV::MalformedCSVError
- end
+ private
+
+ def create_issuable_class
+ Issues::CreateService
+ end
+
+ def record_import_attempt
+ Issues::CsvImport.create!(user: @user, project: @project)
end
end
end