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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# frozen_string_literal: true
module Types
module Packages
class PackageBaseType < ::Types::BaseObject
graphql_name 'PackageBase'
description 'Represents a package in the Package Registry'
connection_type_class Types::CountableConnectionType
authorize :read_package
expose_permissions Types::PermissionTypes::Package
field :id, ::Types::GlobalIDType[::Packages::Package], null: false, description: 'ID of the package.'
field :_links, Types::Packages::PackageLinksType, null: false, method: :itself,
description: 'Map of links to perform actions on the package.'
field :can_destroy, GraphQL::Types::Boolean,
null: false,
deprecated: {
reason: 'Superseded by `user_permissions` field. See `Types::PermissionTypes::Package` type',
milestone: '16.6'
},
description: 'Whether the user can destroy the package.'
field :created_at, Types::TimeType, null: false, description: 'Date of creation.'
field :metadata, Types::Packages::MetadataType,
null: true,
description: 'Package metadata.'
field :name, GraphQL::Types::String, null: false, description: 'Name of the package.'
field :package_type, Types::Packages::PackageTypeEnum, null: false, description: 'Package type.'
field :project, Types::ProjectType, null: false, description: 'Project where the package is stored.'
field :status, Types::Packages::PackageStatusEnum, null: false, description: 'Package status.'
field :status_message, GraphQL::Types::String, null: true, description: 'Status message.'
field :tags, Types::Packages::PackageTagType.connection_type, null: true, description: 'Package tags.'
field :updated_at, Types::TimeType, null: false, description: 'Date of most recent update.'
field :version, GraphQL::Types::String, null: true, description: 'Version string.'
def project
Gitlab::Graphql::Loaders::BatchModelLoader.new(Project, object.project_id).find
end
def can_destroy
Ability.allowed?(current_user, :destroy_package, object)
end
# NOTE: This method must be kept in sync with the union
# type: `Types::Packages::MetadataType`.
#
# `Types::Packages::MetadataType.resolve_type(metadata, ctx)` must never raise.
# rubocop: disable GraphQL/ResolverMethodLength
def metadata
case object.package_type
when 'composer'
object.composer_metadatum
when 'conan'
object.conan_metadatum
when 'maven'
object.maven_metadatum
when 'nuget'
object.nuget_metadatum
when 'pypi'
object.pypi_metadatum
end
end
# rubocop: enable GraphQL/ResolverMethodLength
end
end
end
|