Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/graphql/mutations/issues')
-rw-r--r--app/graphql/mutations/issues/base.rb10
-rw-r--r--app/graphql/mutations/issues/common_mutation_arguments.rb6
-rw-r--r--app/graphql/mutations/issues/create.rb24
-rw-r--r--app/graphql/mutations/issues/move.rb4
-rw-r--r--app/graphql/mutations/issues/set_confidential.rb2
-rw-r--r--app/graphql/mutations/issues/set_due_date.rb13
-rw-r--r--app/graphql/mutations/issues/set_locked.rb2
-rw-r--r--app/graphql/mutations/issues/set_subscription.rb10
-rw-r--r--app/graphql/mutations/issues/update.rb46
9 files changed, 70 insertions, 47 deletions
diff --git a/app/graphql/mutations/issues/base.rb b/app/graphql/mutations/issues/base.rb
index b25987a43f6..2a61e8918a8 100644
--- a/app/graphql/mutations/issues/base.rb
+++ b/app/graphql/mutations/issues/base.rb
@@ -5,18 +5,18 @@ module Mutations
class Base < BaseMutation
include Mutations::ResolvesIssuable
- argument :project_path, GraphQL::ID_TYPE,
+ argument :project_path, GraphQL::Types::ID,
required: true,
- description: "The project the issue to mutate is in."
+ description: "Project the issue to mutate is in."
- argument :iid, GraphQL::STRING_TYPE,
+ argument :iid, GraphQL::Types::String,
required: true,
- description: "The IID of the issue to mutate."
+ description: "IID of the issue to mutate."
field :issue,
Types::IssueType,
null: true,
- description: "The issue after mutation."
+ description: "Issue after mutation."
authorize :update_issue
diff --git a/app/graphql/mutations/issues/common_mutation_arguments.rb b/app/graphql/mutations/issues/common_mutation_arguments.rb
index 65768b85d14..36fd94716a6 100644
--- a/app/graphql/mutations/issues/common_mutation_arguments.rb
+++ b/app/graphql/mutations/issues/common_mutation_arguments.rb
@@ -6,7 +6,7 @@ module Mutations
extend ActiveSupport::Concern
included do
- argument :description, GraphQL::STRING_TYPE,
+ argument :description, GraphQL::Types::String,
required: false,
description: copy_field_description(Types::IssueType, :description)
@@ -14,11 +14,11 @@ module Mutations
required: false,
description: copy_field_description(Types::IssueType, :due_date)
- argument :confidential, GraphQL::BOOLEAN_TYPE,
+ argument :confidential, GraphQL::Types::Boolean,
required: false,
description: copy_field_description(Types::IssueType, :confidential)
- argument :locked, GraphQL::BOOLEAN_TYPE,
+ argument :locked, GraphQL::Types::Boolean,
as: :discussion_locked,
required: false,
description: copy_field_description(Types::IssueType, :discussion_locked)
diff --git a/app/graphql/mutations/issues/create.rb b/app/graphql/mutations/issues/create.rb
index 7c4a851f8aa..32f96f1bfe6 100644
--- a/app/graphql/mutations/issues/create.rb
+++ b/app/graphql/mutations/issues/create.rb
@@ -10,29 +10,29 @@ module Mutations
include CommonMutationArguments
- argument :project_path, GraphQL::ID_TYPE,
+ argument :project_path, GraphQL::Types::ID,
required: true,
description: 'Project full path the issue is associated with.'
- argument :iid, GraphQL::INT_TYPE,
+ argument :iid, GraphQL::Types::Int,
required: false,
- description: 'The IID (internal ID) of a project issue. Only admins and project owners can modify.'
+ description: 'IID (internal ID) of a project issue. Only admins and project owners can modify.'
- argument :title, GraphQL::STRING_TYPE,
+ argument :title, GraphQL::Types::String,
required: true,
description: copy_field_description(Types::IssueType, :title)
argument :milestone_id, ::Types::GlobalIDType[::Milestone],
required: false,
- description: 'The ID of the milestone to assign to the issue. On update milestone will be removed if set to null.'
+ description: 'ID of the milestone to assign to the issue. On update milestone will be removed if set to null.'
- argument :labels, [GraphQL::STRING_TYPE],
+ argument :labels, [GraphQL::Types::String],
required: false,
description: copy_field_description(Types::IssueType, :labels)
argument :label_ids, [::Types::GlobalIDType[::Label]],
required: false,
- description: 'The IDs of labels to be added to the issue.'
+ description: 'IDs of labels to be added to the issue.'
argument :created_at, Types::TimeType,
required: false,
@@ -40,20 +40,20 @@ module Mutations
argument :merge_request_to_resolve_discussions_of, ::Types::GlobalIDType[::MergeRequest],
required: false,
- description: 'The IID of a merge request for which to resolve discussions.'
+ description: 'IID of a merge request for which to resolve discussions.'
- argument :discussion_to_resolve, GraphQL::STRING_TYPE,
+ argument :discussion_to_resolve, GraphQL::Types::String,
required: false,
- description: 'The ID of a discussion to resolve. Also pass `merge_request_to_resolve_discussions_of`.'
+ description: 'ID of a discussion to resolve. Also pass `merge_request_to_resolve_discussions_of`.'
argument :assignee_ids, [::Types::GlobalIDType[::User]],
required: false,
- description: 'The array of user IDs to assign to the issue.'
+ description: 'Array of user IDs to assign to the issue.'
field :issue,
Types::IssueType,
null: true,
- description: 'The issue after mutation.'
+ description: 'Issue after mutation.'
def ready?(**args)
if args.slice(*mutually_exclusive_label_args).size > 1
diff --git a/app/graphql/mutations/issues/move.rb b/app/graphql/mutations/issues/move.rb
index cb4f0f42b38..fb22a2d891c 100644
--- a/app/graphql/mutations/issues/move.rb
+++ b/app/graphql/mutations/issues/move.rb
@@ -6,9 +6,9 @@ module Mutations
graphql_name 'IssueMove'
argument :target_project_path,
- GraphQL::ID_TYPE,
+ GraphQL::Types::ID,
required: true,
- description: 'The project to move the issue to.'
+ description: 'Project to move the issue to.'
def resolve(project_path:, iid:, target_project_path:)
Gitlab::QueryLimiting.disable!('https://gitlab.com/gitlab-org/gitlab/-/issues/20816')
diff --git a/app/graphql/mutations/issues/set_confidential.rb b/app/graphql/mutations/issues/set_confidential.rb
index cfee2420ee0..35e629ddc90 100644
--- a/app/graphql/mutations/issues/set_confidential.rb
+++ b/app/graphql/mutations/issues/set_confidential.rb
@@ -8,7 +8,7 @@ module Mutations
graphql_name 'IssueSetConfidential'
argument :confidential,
- GraphQL::BOOLEAN_TYPE,
+ GraphQL::Types::Boolean,
required: true,
description: 'Whether or not to set the issue as a confidential.'
diff --git a/app/graphql/mutations/issues/set_due_date.rb b/app/graphql/mutations/issues/set_due_date.rb
index 9cefac96b25..70b76da4fcb 100644
--- a/app/graphql/mutations/issues/set_due_date.rb
+++ b/app/graphql/mutations/issues/set_due_date.rb
@@ -7,17 +7,8 @@ module Mutations
argument :due_date,
Types::TimeType,
- required: false,
- description: 'The desired due date for the issue, ' \
- 'due date will be removed if absent or set to null'
-
- def ready?(**args)
- unless args.key?(:due_date)
- raise Gitlab::Graphql::Errors::ArgumentError, 'Argument dueDate must be provided (`null` accepted)'
- end
-
- super
- end
+ required: :nullable,
+ description: 'Desired due date for the issue. Due date is removed if null.'
def resolve(project_path:, iid:, due_date:)
issue = authorized_find!(project_path: project_path, iid: iid)
diff --git a/app/graphql/mutations/issues/set_locked.rb b/app/graphql/mutations/issues/set_locked.rb
index 3a696a64dad..93b31350bbf 100644
--- a/app/graphql/mutations/issues/set_locked.rb
+++ b/app/graphql/mutations/issues/set_locked.rb
@@ -6,7 +6,7 @@ module Mutations
graphql_name 'IssueSetLocked'
argument :locked,
- GraphQL::BOOLEAN_TYPE,
+ GraphQL::Types::Boolean,
required: true,
description: 'Whether or not to lock discussion on the issue.'
diff --git a/app/graphql/mutations/issues/set_subscription.rb b/app/graphql/mutations/issues/set_subscription.rb
index 55c9049b7cf..1d4fa0eefd8 100644
--- a/app/graphql/mutations/issues/set_subscription.rb
+++ b/app/graphql/mutations/issues/set_subscription.rb
@@ -8,18 +8,18 @@ module Mutations
include ResolvesSubscription
include Mutations::ResolvesIssuable
- argument :project_path, GraphQL::ID_TYPE,
+ argument :project_path, GraphQL::Types::ID,
required: true,
- description: "The project the issue to mutate is in."
+ description: "Project the issue to mutate is in."
- argument :iid, GraphQL::STRING_TYPE,
+ argument :iid, GraphQL::Types::String,
required: true,
- description: "The IID of the issue to mutate."
+ description: "IID of the issue to mutate."
field :issue,
Types::IssueType,
null: true,
- description: "The issue after mutation."
+ description: "Issue after mutation."
authorize :update_subscription
diff --git a/app/graphql/mutations/issues/update.rb b/app/graphql/mutations/issues/update.rb
index 1ceed868a6c..6cab1214d24 100644
--- a/app/graphql/mutations/issues/update.rb
+++ b/app/graphql/mutations/issues/update.rb
@@ -7,21 +7,25 @@ module Mutations
include CommonMutationArguments
- argument :title, GraphQL::STRING_TYPE,
+ argument :title, GraphQL::Types::String,
required: false,
description: copy_field_description(Types::IssueType, :title)
- argument :milestone_id, GraphQL::ID_TYPE, # rubocop: disable Graphql/IDType
+ argument :milestone_id, GraphQL::Types::ID, # rubocop: disable Graphql/IDType
required: false,
- description: 'The ID of the milestone to assign to the issue. On update milestone will be removed if set to null.'
+ description: 'ID of the milestone to assign to the issue. On update milestone will be removed if set to null.'
- argument :add_label_ids, [GraphQL::ID_TYPE],
+ argument :add_label_ids, [GraphQL::Types::ID],
required: false,
- description: 'The IDs of labels to be added to the issue.'
+ description: 'IDs of labels to be added to the issue.'
- argument :remove_label_ids, [GraphQL::ID_TYPE],
+ argument :remove_label_ids, [GraphQL::Types::ID],
required: false,
- description: 'The IDs of labels to be removed from the issue.'
+ description: 'IDs of labels to be removed from the issue.'
+
+ argument :label_ids, [GraphQL::Types::ID],
+ required: false,
+ description: 'IDs of labels to be set. Replaces existing issue labels.'
argument :state_event, Types::IssueStateEventEnum,
description: 'Close or reopen an issue.',
@@ -31,6 +35,8 @@ module Mutations
issue = authorized_find!(project_path: project_path, iid: iid)
project = issue.project
+ args = parse_arguments(args)
+
spam_params = ::Spam::SpamParams.new_from_request(request: context[:request])
::Issues::UpdateService.new(project: project, current_user: current_user, params: args, spam_params: spam_params).execute(issue)
@@ -39,6 +45,32 @@ module Mutations
errors: errors_on_object(issue)
}
end
+
+ def ready?(label_ids: [], add_label_ids: [], remove_label_ids: [], **args)
+ if label_ids.any? && (add_label_ids.any? || remove_label_ids.any?)
+ raise Gitlab::Graphql::Errors::ArgumentError, 'labelIds is mutually exclusive with any of addLabelIds or removeLabelIds'
+ end
+
+ super
+ end
+
+ private
+
+ def parse_arguments(args)
+ args[:add_label_ids] = parse_label_ids(args[:add_label_ids])
+ args[:remove_label_ids] = parse_label_ids(args[:remove_label_ids])
+ args[:label_ids] = parse_label_ids(args[:label_ids])
+
+ args
+ end
+
+ def parse_label_ids(ids)
+ ids&.map do |gid|
+ GitlabSchema.parse_gid(gid, expected_type: ::Label).model_id
+ rescue Gitlab::Graphql::Errors::ArgumentError
+ gid
+ end
+ end
end
end
end