diff options
Diffstat (limited to 'app/graphql/mutations/merge_requests')
7 files changed, 72 insertions, 8 deletions
diff --git a/app/graphql/mutations/merge_requests/create.rb b/app/graphql/mutations/merge_requests/create.rb new file mode 100644 index 00000000000..e210987f259 --- /dev/null +++ b/app/graphql/mutations/merge_requests/create.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +module Mutations + module MergeRequests + class Create < BaseMutation + include ResolvesProject + + graphql_name 'MergeRequestCreate' + + argument :project_path, GraphQL::ID_TYPE, + required: true, + description: 'Project full path the merge request is associated with' + + argument :title, GraphQL::STRING_TYPE, + required: true, + description: copy_field_description(Types::MergeRequestType, :title) + + argument :source_branch, GraphQL::STRING_TYPE, + required: true, + description: copy_field_description(Types::MergeRequestType, :source_branch) + + argument :target_branch, GraphQL::STRING_TYPE, + required: true, + description: copy_field_description(Types::MergeRequestType, :target_branch) + + argument :description, GraphQL::STRING_TYPE, + required: false, + description: copy_field_description(Types::MergeRequestType, :description) + + field :merge_request, + Types::MergeRequestType, + null: true, + description: 'The merge request after mutation' + + authorize :create_merge_request_from + + def resolve(project_path:, title:, source_branch:, target_branch:, description: nil) + project = authorized_find!(full_path: project_path) + + attributes = { + title: title, + source_branch: source_branch, + target_branch: target_branch, + author_id: current_user.id, + description: description + } + + merge_request = ::MergeRequests::CreateService.new(project, current_user, attributes).execute + + { + merge_request: merge_request.valid? ? merge_request : nil, + errors: errors_on_object(merge_request) + } + end + + private + + def find_object(full_path:) + resolve_project(full_path: full_path) + end + end + end +end diff --git a/app/graphql/mutations/merge_requests/set_assignees.rb b/app/graphql/mutations/merge_requests/set_assignees.rb index 8f0025f0a58..de244b62d0f 100644 --- a/app/graphql/mutations/merge_requests/set_assignees.rb +++ b/app/graphql/mutations/merge_requests/set_assignees.rb @@ -40,7 +40,7 @@ module Mutations { merge_request: merge_request, - errors: merge_request.errors.full_messages + errors: errors_on_object(merge_request) } end end diff --git a/app/graphql/mutations/merge_requests/set_labels.rb b/app/graphql/mutations/merge_requests/set_labels.rb index 71f7a353bc9..c1e45808593 100644 --- a/app/graphql/mutations/merge_requests/set_labels.rb +++ b/app/graphql/mutations/merge_requests/set_labels.rb @@ -24,8 +24,9 @@ module Mutations project = merge_request.project label_ids = label_ids + .map { |gid| GlobalID.parse(gid) } .select(&method(:label_descendant?)) - .map { |gid| GlobalID.parse(gid).model_id } # MergeRequests::UpdateService expects integers + .map(&:model_id) # MergeRequests::UpdateService expects integers attribute_name = case operation_mode when Types::MutationOperationModeEnum.enum[:append] @@ -41,12 +42,12 @@ module Mutations { merge_request: merge_request, - errors: merge_request.errors.full_messages + errors: errors_on_object(merge_request) } end def label_descendant?(gid) - GlobalID.parse(gid)&.model_class&.ancestors&.include?(Label) + gid&.model_class&.ancestors&.include?(Label) end end end diff --git a/app/graphql/mutations/merge_requests/set_locked.rb b/app/graphql/mutations/merge_requests/set_locked.rb index 09aaa0b39aa..c49d5186a03 100644 --- a/app/graphql/mutations/merge_requests/set_locked.rb +++ b/app/graphql/mutations/merge_requests/set_locked.rb @@ -21,7 +21,7 @@ module Mutations { merge_request: merge_request, - errors: merge_request.errors.full_messages + errors: errors_on_object(merge_request) } end end diff --git a/app/graphql/mutations/merge_requests/set_milestone.rb b/app/graphql/mutations/merge_requests/set_milestone.rb index 707d6677952..b3412dd9ed2 100644 --- a/app/graphql/mutations/merge_requests/set_milestone.rb +++ b/app/graphql/mutations/merge_requests/set_milestone.rb @@ -22,7 +22,7 @@ module Mutations { merge_request: merge_request, - errors: merge_request.errors.full_messages + errors: errors_on_object(merge_request) } end end diff --git a/app/graphql/mutations/merge_requests/set_subscription.rb b/app/graphql/mutations/merge_requests/set_subscription.rb index 86750152775..1535481ab37 100644 --- a/app/graphql/mutations/merge_requests/set_subscription.rb +++ b/app/graphql/mutations/merge_requests/set_subscription.rb @@ -18,7 +18,7 @@ module Mutations { merge_request: merge_request, - errors: merge_request.errors.full_messages + errors: errors_on_object(merge_request) } end end diff --git a/app/graphql/mutations/merge_requests/set_wip.rb b/app/graphql/mutations/merge_requests/set_wip.rb index a2aa0c84ee4..5d2077c12f2 100644 --- a/app/graphql/mutations/merge_requests/set_wip.rb +++ b/app/graphql/mutations/merge_requests/set_wip.rb @@ -21,7 +21,7 @@ module Mutations { merge_request: merge_request, - errors: merge_request.errors.full_messages + errors: errors_on_object(merge_request) } end |