summaryrefslogtreecommitdiff
path: root/app/graphql/loaders/iid_loader.rb
blob: f9827765a9221f99c51227b00cfab48bc2c31763 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Loaders::IidLoader
  include Loaders::BaseLoader

  class << self
    def merge_request(obj, args, ctx)
      iid = args[:iid]
      project = Loaders::FullPathLoader.project_by_full_path(args[:project])
      merge_request_by_project_and_iid(project, iid)
    end

    def merge_request_by_project_and_iid(project_loader, iid)
      project_id = project_loader.__sync&.id

      # IIDs are represented as the GraphQL `id` type, which is a string
      BatchLoader.for(iid.to_s).batch(key: "merge_request:target_project:#{project_id}:iid") do |iids, loader|
        if project_id
          results = MergeRequest.where(target_project_id: project_id, iid: iids)
          results.each { |mr| loader.call(mr.iid.to_s, mr) }
        end
      end
    end
  end
end