diff options
Diffstat (limited to 'app/graphql/mutations/boards')
-rw-r--r-- | app/graphql/mutations/boards/common_mutation_arguments.rb | 24 | ||||
-rw-r--r-- | app/graphql/mutations/boards/create.rb | 26 | ||||
-rw-r--r-- | app/graphql/mutations/boards/lists/create.rb | 20 | ||||
-rw-r--r-- | app/graphql/mutations/boards/update.rb | 43 |
4 files changed, 75 insertions, 38 deletions
diff --git a/app/graphql/mutations/boards/common_mutation_arguments.rb b/app/graphql/mutations/boards/common_mutation_arguments.rb new file mode 100644 index 00000000000..c4f8d299318 --- /dev/null +++ b/app/graphql/mutations/boards/common_mutation_arguments.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Mutations + module Boards + module CommonMutationArguments + extend ActiveSupport::Concern + + included do + argument :name, + GraphQL::STRING_TYPE, + required: false, + description: 'The board name.' + argument :hide_backlog_list, + GraphQL::BOOLEAN_TYPE, + required: false, + description: copy_field_description(Types::BoardType, :hide_backlog_list) + argument :hide_closed_list, + GraphQL::BOOLEAN_TYPE, + required: false, + description: copy_field_description(Types::BoardType, :hide_closed_list) + end + end + end +end diff --git a/app/graphql/mutations/boards/create.rb b/app/graphql/mutations/boards/create.rb index ebbd19930ec..92bce557446 100644 --- a/app/graphql/mutations/boards/create.rb +++ b/app/graphql/mutations/boards/create.rb @@ -7,36 +7,18 @@ module Mutations graphql_name 'CreateBoard' + include Mutations::Boards::CommonMutationArguments + field :board, Types::BoardType, null: true, description: 'The board after mutation.' - argument :name, - GraphQL::STRING_TYPE, - required: false, - description: 'The board name.' - argument :assignee_id, - GraphQL::STRING_TYPE, - required: false, - description: 'The ID of the user to be assigned to the board.' - argument :milestone_id, - Types::GlobalIDType[Milestone], - required: false, - description: 'The ID of the milestone to be assigned to the board.' - argument :weight, - GraphQL::BOOLEAN_TYPE, - required: false, - description: 'The weight of the board.' - argument :label_ids, - [Types::GlobalIDType[Label]], - required: false, - description: 'The IDs of labels to be added to the board.' - authorize :admin_board def resolve(args) board_parent = authorized_resource_parent_find!(args) + response = ::Boards::CreateService.new(board_parent, current_user, args).execute { @@ -47,3 +29,5 @@ module Mutations end end end + +Mutations::Boards::Create.prepend_if_ee('::EE::Mutations::Boards::Create') diff --git a/app/graphql/mutations/boards/lists/create.rb b/app/graphql/mutations/boards/lists/create.rb index 3fe1052315f..f6df63365b2 100644 --- a/app/graphql/mutations/boards/lists/create.rb +++ b/app/graphql/mutations/boards/lists/create.rb @@ -27,30 +27,16 @@ module Mutations board = authorized_find!(id: args[:board_id]) params = create_list_params(args) - authorize_list_type_resource!(board, params) - - list = create_list(board, params) + response = create_list(board, params) { - list: list.valid? ? list : nil, - errors: errors_on_object(list) + list: response.success? ? response.payload[:list] : nil, + errors: response.errors } end private - # Overridden in EE - def authorize_list_type_resource!(board, params) - return unless params[:label_id] - - labels = ::Labels::AvailableLabelsService.new(current_user, board.resource_parent, params) - .filter_labels_ids_in_param(:label_id) - - unless labels.present? - raise Gitlab::Graphql::Errors::ArgumentError, 'Label not found!' - end - end - def create_list(board, params) create_list_service = ::Boards::Lists::CreateService.new(board.resource_parent, current_user, params) diff --git a/app/graphql/mutations/boards/update.rb b/app/graphql/mutations/boards/update.rb new file mode 100644 index 00000000000..5cb434e41fd --- /dev/null +++ b/app/graphql/mutations/boards/update.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module Mutations + module Boards + class Update < ::Mutations::BaseMutation + graphql_name 'UpdateBoard' + + include Mutations::Boards::CommonMutationArguments + + argument :id, + ::Types::GlobalIDType[::Board], + required: true, + description: 'The board global ID.' + + field :board, + Types::BoardType, + null: true, + description: 'The board after mutation.' + + authorize :admin_board + + def resolve(id:, **args) + board = authorized_find!(id: id) + + ::Boards::UpdateService.new(board.resource_parent, current_user, args).execute(board) + + { + board: board, + errors: errors_on_object(board) + } + end + + def find_object(id:) + # TODO: remove this line when the compatibility layer is removed + # See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883 + id = ::Types::GlobalIDType[::Board].coerce_isolated_input(id) + GitlabSchema.find_by_gid(id) + end + end + end +end + +Mutations::Boards::Update.prepend_if_ee('::EE::Mutations::Boards::Update') |