From 0b5818943f662378a5d4187da743e634bd04c3f7 Mon Sep 17 00:00:00 2001 From: Kassio Borges Date: Wed, 7 Apr 2021 21:55:58 +0100 Subject: [PATCH] WIP --- .../resolvers/exportable_type_resolver.rb | 15 ++++++++ app/graphql/types/exportable_entities_type.rb | 18 ++++++++++ app/graphql/types/exportable_type_enum.rb | 11 ++++++ app/graphql/types/group_type.rb | 6 ++++ doc/api/graphql/reference/index.md | 34 +++++++++++++++++++ 5 files changed, 84 insertions(+) create mode 100644 app/graphql/resolvers/exportable_type_resolver.rb create mode 100644 app/graphql/types/exportable_entities_type.rb create mode 100644 app/graphql/types/exportable_type_enum.rb diff --git a/app/graphql/resolvers/exportable_type_resolver.rb b/app/graphql/resolvers/exportable_type_resolver.rb new file mode 100644 index 00000000000000..d0ac1ffa832e78 --- /dev/null +++ b/app/graphql/resolvers/exportable_type_resolver.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Resolvers + class ExportableTypeResolver < BaseResolver + argument :types, [Types::ExportableTypeEnum], + required: true, + description: 'What types to list.' + + def resolve(**args) + args[:types].flat_map do |model| + model.where(group_id: object.id) + end + end + end +end diff --git a/app/graphql/types/exportable_entities_type.rb b/app/graphql/types/exportable_entities_type.rb new file mode 100644 index 00000000000000..a9588eb06cf30a --- /dev/null +++ b/app/graphql/types/exportable_entities_type.rb @@ -0,0 +1,18 @@ +module Types + class ExportableEntitiesType < ::Types::BaseUnion + possible_types ::Types::EpicType, + ::Types::LabelType #, + # ::Types::EventType, + # ::Types::AwardEmojis::AwardEmojiType, + # ::Types::Notes::NoteType + + def self.resolve_type(object, _context) + case object + when Epic + ::Types::EpicType + when GroupLabel + ::Types::LabelType + end + end + end +end diff --git a/app/graphql/types/exportable_type_enum.rb b/app/graphql/types/exportable_type_enum.rb new file mode 100644 index 00000000000000..84ee61495ea299 --- /dev/null +++ b/app/graphql/types/exportable_type_enum.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Types + class ExportableTypeEnum < BaseEnum + value 'Epic', value: Epic, description: 'Epic.' + value 'Label', value: GroupLabel, description: 'Label.' + # value 'Event', value: ::Resolvers::EventResolver, description: 'Event.' + # value 'Note', value: ::Resolvers::Notes::NoteResolver, description: 'Note.' + # value 'AwardEmoji', value: ::Resolvers::AwardEmojis::AwardEmojiResolver, description: 'AwardEmoji.' + end +end diff --git a/app/graphql/types/group_type.rb b/app/graphql/types/group_type.rb index a44281b2bdfdf0..7950a9536d6a71 100644 --- a/app/graphql/types/group_type.rb +++ b/app/graphql/types/group_type.rb @@ -161,6 +161,12 @@ def container_repositories_count group.container_repositories.size end + field :exportable_entities, + ::Types::ExportableEntitiesType.connection_type, + null: true, + description: 'Exportable Types', + resolver: Resolvers::ExportableTypeResolver + private def group diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 2e52cea7a3d6c4..4475db6902cead 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -3024,6 +3024,25 @@ Autogenerated return type of ExportRequirements. | `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | | `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | +### `ExportableEntitiesConnection` + +The connection type for ExportableEntities. + +| Field | Type | Description | +| ----- | ---- | ----------- | +| `edges` | [`[ExportableEntitiesEdge]`](#exportableentitiesedge) | A list of edges. | +| `nodes` | [`[ExportableEntities]`](#exportableentities) | A list of nodes. | +| `pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. | + +### `ExportableEntitiesEdge` + +An edge in a connection. + +| Field | Type | Description | +| ----- | ---- | ----------- | +| `cursor` | [`String!`](#string) | A cursor for use in pagination. | +| `node` | [`ExportableEntities`](#exportableentities) | The item at the end of the edge. | + ### `ExternalIssue` Represents an external issue. @@ -3108,6 +3127,7 @@ Autogenerated return type of GitlabSubscriptionActivate. | `epicBoards` | [`EpicBoardConnection`](#epicboardconnection) | Find epic boards. | | `epics` | [`EpicConnection`](#epicconnection) | Find epics. | | `epicsEnabled` | [`Boolean`](#boolean) | Indicates if Epics are enabled for namespace. | +| `exportableEntities` | [`ExportableEntitiesConnection`](#exportableentitiesconnection) | Exportable Types. | | `fullName` | [`String!`](#string) | Full name of the namespace. | | `fullPath` | [`ID!`](#id) | Full path of the namespace. | | `groupMembers` | [`GroupMemberConnection`](#groupmemberconnection) | A membership of a user within this group. | @@ -7694,6 +7714,13 @@ Event action. | `REOPENED` | Reopened action. | | `UPDATED` | Updated action. | +### `ExportableTypeEnum` + +| Value | Description | +| ----- | ----------- | +| `Epic` | Epic. | +| `Label` | Label. | + ### `GroupMemberRelation` Group member relation. @@ -8829,6 +8856,13 @@ abstract types. ### Unions +#### `ExportableEntities` + +One of: + +- [`Epic`](#epic) +- [`Label`](#label) + #### `PackageMetadata` Represents metadata associated with a Package. -- GitLab