diff options
Diffstat (limited to 'app/graphql/mutations/customer_relations/contacts/update.rb')
-rw-r--r-- | app/graphql/mutations/customer_relations/contacts/update.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/app/graphql/mutations/customer_relations/contacts/update.rb b/app/graphql/mutations/customer_relations/contacts/update.rb new file mode 100644 index 00000000000..e9e7c9b6abd --- /dev/null +++ b/app/graphql/mutations/customer_relations/contacts/update.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +module Mutations + module CustomerRelations + module Contacts + class Update < Mutations::BaseMutation + include ResolvesIds + + graphql_name 'CustomerRelationsContactUpdate' + + authorize :admin_contact + + field :contact, + Types::CustomerRelations::ContactType, + null: true, + description: 'Contact after the mutation.' + + argument :id, ::Types::GlobalIDType[::CustomerRelations::Contact], + required: true, + description: 'Global ID of the contact.' + + argument :organization_id, ::Types::GlobalIDType[::CustomerRelations::Organization], + required: false, + description: 'Organization of the contact.' + + argument :first_name, GraphQL::Types::String, + required: false, + description: 'First name of the contact.' + + argument :last_name, GraphQL::Types::String, + required: false, + description: 'Last name of the contact.' + + argument :phone, GraphQL::Types::String, + required: false, + description: 'Phone number of the contact.' + + argument :email, GraphQL::Types::String, + required: false, + description: 'Email address of the contact.' + + argument :description, GraphQL::Types::String, + required: false, + description: 'Description of or notes for the contact.' + + def resolve(args) + contact = ::Gitlab::Graphql::Lazy.force(GitlabSchema.object_from_id(args.delete(:id), expected_type: ::CustomerRelations::Contact)) + raise_resource_not_available_error! unless contact + + group = contact.group + raise Gitlab::Graphql::Errors::ResourceNotAvailable, 'Feature disabled' unless Feature.enabled?(:customer_relations, group, default_enabled: :yaml) + + authorize!(group) + + result = ::CustomerRelations::Contacts::UpdateService.new(group: group, current_user: current_user, params: args).execute(contact) + { contact: result.payload, errors: result.errors } + end + end + end + end +end |