diff options
Diffstat (limited to 'lib/gitlab/jira_import/issue_serializer.rb')
-rw-r--r-- | lib/gitlab/jira_import/issue_serializer.rb | 62 |
1 files changed, 23 insertions, 39 deletions
diff --git a/lib/gitlab/jira_import/issue_serializer.rb b/lib/gitlab/jira_import/issue_serializer.rb index cdcb62ac6e9..df57680073e 100644 --- a/lib/gitlab/jira_import/issue_serializer.rb +++ b/lib/gitlab/jira_import/issue_serializer.rb @@ -3,15 +3,14 @@ module Gitlab module JiraImport class IssueSerializer - attr_reader :jira_issue, :project, :params, :formatter - attr_accessor :metadata + attr_reader :jira_issue, :project, :import_owner_id, :params, :formatter - def initialize(project, jira_issue, params = {}) + def initialize(project, jira_issue, import_owner_id, params = {}) @jira_issue = jira_issue @project = project + @import_owner_id = import_owner_id @params = params @formatter = Gitlab::ImportFormatter.new - @metadata = [] end def execute @@ -23,7 +22,9 @@ module Gitlab state_id: map_status(jira_issue.status.statusCategory), updated_at: jira_issue.updated, created_at: jira_issue.created, - author_id: project.creator_id # TODO: map actual author: https://gitlab.com/gitlab-org/gitlab/-/issues/210580 + author_id: reporter, + assignee_ids: assignees, + label_ids: label_ids } end @@ -35,10 +36,8 @@ module Gitlab def description body = [] - body << formatter.author_line(jira_issue.reporter.displayName) - body << formatter.assignee_line(jira_issue.assignee.displayName) if jira_issue.assignee body << jira_issue.description - body << add_metadata + body << MetadataCollector.new(jira_issue).execute body.join end @@ -52,48 +51,33 @@ module Gitlab end end - def add_metadata - add_field(%w(issuetype name), 'Issue type') - add_field(%w(priority name), 'Priority') - add_labels - add_field('environment', 'Environment') - add_field('duedate', 'Due date') - add_parent - add_versions - - return if metadata.empty? - - metadata.join("\n").prepend("\n\n---\n\n**Issue metadata**\n\n") + def map_user_id(jira_user) + Gitlab::JiraImport::UserMapper.new(project, jira_user).execute&.id end - def add_field(keys, field_label) - value = fields.dig(*keys) - return if value.blank? - - metadata << "- #{field_label}: #{value}" + def reporter + map_user_id(jira_issue.reporter&.attrs) || import_owner_id end - def add_labels - return if fields['labels'].blank? - - metadata << "- Labels: #{fields['labels'].join(', ')}" - end + def assignees + found_user_id = map_user_id(jira_issue.assignee&.attrs) - def add_parent - parent_issue_key = fields.dig('parent', 'key') - return if parent_issue_key.blank? + return unless found_user_id - metadata << "- Parent issue: [#{parent_issue_key}] #{fields['parent']['fields']['summary']}" + [found_user_id] end - def add_versions - return if fields['fixVersions'].blank? + # We already create labels in Gitlab::JiraImport::LabelsImporter stage but + # there is a possibility it may fail or + # new labels were created on the Jira in the meantime + def label_ids + return if jira_issue.fields['labels'].blank? - metadata << "- Fix versions: #{fields['fixVersions'].map { |version| version['name'] }.join(', ')}" + Gitlab::JiraImport::HandleLabelsService.new(project, jira_issue.fields['labels']).execute end - def fields - jira_issue.fields + def logger + @logger ||= Gitlab::Import::Logger.build end end end |