diff options
Diffstat (limited to 'app/graphql')
-rw-r--r-- | app/graphql/gitlab_schema.rb | 25 | ||||
-rw-r--r-- | app/graphql/mutations/merge_requests/base.rb | 2 | ||||
-rw-r--r-- | app/graphql/resolvers/issues_resolver.rb | 4 | ||||
-rw-r--r-- | app/graphql/resolvers/merge_requests_resolver.rb | 4 | ||||
-rw-r--r-- | app/graphql/types/base_object.rb | 5 | ||||
-rw-r--r-- | app/graphql/types/ci/pipeline_type.rb | 2 | ||||
-rw-r--r-- | app/graphql/types/merge_request_type.rb | 2 |
7 files changed, 37 insertions, 7 deletions
diff --git a/app/graphql/gitlab_schema.rb b/app/graphql/gitlab_schema.rb index f8ad6bee21b..2e5bdbd79c8 100644 --- a/app/graphql/gitlab_schema.rb +++ b/app/graphql/gitlab_schema.rb @@ -45,6 +45,31 @@ class GitlabSchema < GraphQL::Schema super(query_str, **kwargs) end + def id_from_object(object) + unless object.respond_to?(:to_global_id) + # This is an error in our schema and needs to be solved. So raise a + # more meaningfull error message + raise "#{object} does not implement `to_global_id`. "\ + "Include `GlobalID::Identification` into `#{object.class}" + end + + object.to_global_id + end + + def object_from_id(global_id) + gid = GlobalID.parse(global_id) + + unless gid + raise Gitlab::Graphql::Errors::ArgumentError, "#{global_id} is not a valid GitLab id." + end + + if gid.model_class < ApplicationRecord + Gitlab::Graphql::Loaders::BatchModelLoader.new(gid.model_class, gid.model_id).find + else + gid.find + end + end + private def max_query_complexity(ctx) diff --git a/app/graphql/mutations/merge_requests/base.rb b/app/graphql/mutations/merge_requests/base.rb index 7d0cb777ad1..e85d16fc2c5 100644 --- a/app/graphql/mutations/merge_requests/base.rb +++ b/app/graphql/mutations/merge_requests/base.rb @@ -10,7 +10,7 @@ module Mutations required: true, description: "The project the merge request to mutate is in" - argument :iid, GraphQL::ID_TYPE, + argument :iid, GraphQL::STRING_TYPE, required: true, description: "The iid of the merge request to mutate" diff --git a/app/graphql/resolvers/issues_resolver.rb b/app/graphql/resolvers/issues_resolver.rb index 3ee3849f483..6988b451ec3 100644 --- a/app/graphql/resolvers/issues_resolver.rb +++ b/app/graphql/resolvers/issues_resolver.rb @@ -2,11 +2,11 @@ module Resolvers class IssuesResolver < BaseResolver - argument :iid, GraphQL::ID_TYPE, + argument :iid, GraphQL::STRING_TYPE, required: false, description: 'The IID of the issue, e.g., "1"' - argument :iids, [GraphQL::ID_TYPE], + argument :iids, [GraphQL::STRING_TYPE], required: false, description: 'The list of IIDs of issues, e.g., [1, 2]' argument :state, Types::IssuableStateEnum, diff --git a/app/graphql/resolvers/merge_requests_resolver.rb b/app/graphql/resolvers/merge_requests_resolver.rb index 90795c797ac..b84e60066e1 100644 --- a/app/graphql/resolvers/merge_requests_resolver.rb +++ b/app/graphql/resolvers/merge_requests_resolver.rb @@ -2,11 +2,11 @@ module Resolvers class MergeRequestsResolver < BaseResolver - argument :iid, GraphQL::ID_TYPE, + argument :iid, GraphQL::STRING_TYPE, required: false, description: 'The IID of the merge request, e.g., "1"' - argument :iids, [GraphQL::ID_TYPE], + argument :iids, [GraphQL::STRING_TYPE], required: false, description: 'The list of IIDs of issues, e.g., [1, 2]' diff --git a/app/graphql/types/base_object.rb b/app/graphql/types/base_object.rb index 82b78abd573..e40059c46bb 100644 --- a/app/graphql/types/base_object.rb +++ b/app/graphql/types/base_object.rb @@ -6,5 +6,10 @@ module Types prepend Gitlab::Graphql::ExposePermissions field_class Types::BaseField + + # All graphql fields exposing an id, should expose a global id. + def id + GitlabSchema.id_from_object(object) + end end end diff --git a/app/graphql/types/ci/pipeline_type.rb b/app/graphql/types/ci/pipeline_type.rb index de7d6570a3e..cff81e5670b 100644 --- a/app/graphql/types/ci/pipeline_type.rb +++ b/app/graphql/types/ci/pipeline_type.rb @@ -10,7 +10,7 @@ module Types expose_permissions Types::PermissionTypes::Ci::Pipeline field :id, GraphQL::ID_TYPE, null: false - field :iid, GraphQL::ID_TYPE, null: false + field :iid, GraphQL::STRING_TYPE, null: false field :sha, GraphQL::STRING_TYPE, null: false field :before_sha, GraphQL::STRING_TYPE, null: true diff --git a/app/graphql/types/merge_request_type.rb b/app/graphql/types/merge_request_type.rb index 120ffe0dfde..85ac3102442 100644 --- a/app/graphql/types/merge_request_type.rb +++ b/app/graphql/types/merge_request_type.rb @@ -11,7 +11,7 @@ module Types present_using MergeRequestPresenter field :id, GraphQL::ID_TYPE, null: false - field :iid, GraphQL::ID_TYPE, null: false + field :iid, GraphQL::STRING_TYPE, null: false field :title, GraphQL::STRING_TYPE, null: false field :description, GraphQL::STRING_TYPE, null: true field :state, MergeRequestStateEnum, null: false |