1# frozen_string_literal: true 2 3module Resolvers 4 module DesignManagement 5 module Version 6 # Resolver for DesignAtVersion objects given an implicit version context 7 class DesignsAtVersionResolver < BaseResolver 8 include Gitlab::Graphql::Authorize::AuthorizeResource 9 10 type Types::DesignManagement::DesignAtVersionType, null: true 11 12 authorize :read_design 13 14 DesignID = ::Types::GlobalIDType[::DesignManagement::Design] 15 16 argument :ids, [DesignID], 17 required: false, 18 description: 'Filters designs by their ID.' 19 argument :filenames, 20 [GraphQL::Types::String], 21 required: false, 22 description: 'Filters designs by their filename.' 23 24 def self.single 25 ::Resolvers::DesignManagement::Version::DesignAtVersionResolver 26 end 27 28 def resolve(ids: nil, filenames: nil) 29 find(ids, filenames).execute.map { |d| make(d) } 30 end 31 32 private 33 34 def find(ids, filenames) 35 ::DesignManagement::DesignsFinder.new(issue, current_user, 36 ids: design_ids(ids), 37 filenames: filenames, 38 visible_at_version: version) 39 end 40 41 def design_ids(gids) 42 return if gids.nil? 43 44 # TODO: remove this line when the compatibility layer is removed 45 # See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883 46 gids = gids.map { |id| DesignID.coerce_isolated_input(id) } 47 gids.map(&:model_id) 48 end 49 50 def issue 51 version.issue 52 end 53 54 def version 55 object 56 end 57 58 def make(design) 59 ::DesignManagement::DesignAtVersion.new(design: design, version: version) 60 end 61 end 62 end 63 end 64end 65