59 lines
1.7 KiB
Ruby
59 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Resolvers
|
|
module DesignManagement
|
|
class DesignsResolver < BaseResolver
|
|
DesignID = ::Types::GlobalIDType[::DesignManagement::Design]
|
|
VersionID = ::Types::GlobalIDType[::DesignManagement::Version]
|
|
|
|
type ::Types::DesignManagement::DesignType.connection_type, null: true
|
|
|
|
argument :at_version, VersionID,
|
|
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'
|
|
argument :filenames, [GraphQL::Types::String],
|
|
required: false,
|
|
description: 'Filters designs by their filename.'
|
|
argument :ids, [DesignID],
|
|
required: false,
|
|
description: 'Filters designs by their ID.'
|
|
|
|
def self.single
|
|
::Resolvers::DesignManagement::DesignResolver
|
|
end
|
|
|
|
def resolve(ids: nil, filenames: nil, at_version: nil)
|
|
context.scoped_set!(:at_version_argument, VersionID.coerce_isolated_input(at_version)) if at_version
|
|
|
|
::Gitlab::Graphql::Lazy.with_value(version(at_version)) do |visible_at|
|
|
::DesignManagement::DesignsFinder.new(
|
|
issue,
|
|
current_user,
|
|
ids: design_ids(ids),
|
|
filenames: filenames,
|
|
visible_at_version: visible_at
|
|
).execute
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def version(at_version)
|
|
return unless at_version
|
|
|
|
GitlabSchema.find_by_gid(at_version)
|
|
end
|
|
|
|
def design_ids(gids)
|
|
return if gids.nil?
|
|
|
|
gids.map(&:model_id)
|
|
end
|
|
|
|
def issue
|
|
object.issue
|
|
end
|
|
end
|
|
end
|
|
end
|