summaryrefslogtreecommitdiff
path: root/app/graphql/resolvers/design_management/designs_resolver.rb
blob: 81f94d5cb306ce04fd9b5c597ea56bc71ccf4b97 (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
50
# frozen_string_literal: true

module Resolvers
  module DesignManagement
    class DesignsResolver < BaseResolver
      argument :ids,
               [GraphQL::ID_TYPE],
               required: false,
               description: 'Filters designs by their ID'
      argument :filenames,
               [GraphQL::STRING_TYPE],
               required: false,
               description: 'Filters designs by their filename'
      argument :at_version,
               GraphQL::ID_TYPE,
               required: false,
               description: 'Filters designs to only those that existed at the version. ' \
                            'If argument is omitted or nil then all designs will reflect the latest version'

      def self.single
        ::Resolvers::DesignManagement::DesignResolver
      end

      def resolve(ids: nil, filenames: nil, at_version: nil)
        ::DesignManagement::DesignsFinder.new(
          issue,
          current_user,
          ids: design_ids(ids),
          filenames: filenames,
          visible_at_version: version(at_version),
          order: :id
        ).execute
      end

      private

      def version(at_version)
        GitlabSchema.object_from_id(at_version)&.sync if at_version
      end

      def design_ids(ids)
        ids&.map { |id| GlobalID.parse(id).model_id }
      end

      def issue
        object.issue
      end
    end
  end
end