summaryrefslogtreecommitdiff
path: root/lib/gitlab/github_import/importer/events/base_importer.rb
blob: 8218acf2bfb8bf6466992c89b990ea4183fde24e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# frozen_string_literal: true

module Gitlab
  module GithubImport
    module Importer
      module Events
        # Base class for importing issue events during project import from GitHub
        class BaseImporter
          # project - An instance of `Project`.
          # client - An instance of `Gitlab::GithubImport::Client`.
          def initialize(project, client)
            @project = project
            @user_finder = UserFinder.new(project, client)
          end

          # issue_event - An instance of `Gitlab::GithubImport::Representation::IssueEvent`.
          def execute(issue_event)
            raise NotImplementedError
          end

          private

          attr_reader :project, :user_finder

          def author_id(issue_event, author_key: :actor)
            user_finder.author_id_for(issue_event, author_key: author_key).first
          end

          def issuable_db_id(object)
            IssuableFinder.new(project, object).database_id
          end

          def issuable_type(issue_event)
            merge_request_event?(issue_event) ? MergeRequest.name : Issue.name
          end

          def merge_request_event?(issue_event)
            issue_event.issuable_type == MergeRequest.name
          end

          def resource_event_belongs_to(issue_event)
            belongs_to_key = merge_request_event?(issue_event) ? :merge_request_id : :issue_id
            { belongs_to_key => issuable_db_id(issue_event) }
          end
        end
      end
    end
  end
end