update.rb 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. module Gql::Mutations
  3. class User::Update < BaseMutation
  4. description 'Update an existing user.'
  5. argument :id, GraphQL::Types::ID, description: 'The user ID', as: :current_user, loads: Gql::Types::UserType
  6. argument :input, Gql::Types::Input::UserInputType, description: 'The user data'
  7. field :user, Gql::Types::UserType, description: 'The created user.'
  8. def load_id(id:)
  9. Gql::ZammadSchema.verified_object_from_id(id, type: ::User, user: context.current_user)
  10. end
  11. def authorized?(current_user:, input:)
  12. Pundit.authorize(context.current_user, current_user, :update?)
  13. end
  14. def resolve(current_user:, input:)
  15. { user: update(current_user, input) }
  16. end
  17. private
  18. def update(current_user, input)
  19. user_data = input.to_h
  20. set_core_workflow_information(user_data, ::User, 'update')
  21. execute_service(::User::CheckAttributesService, user_data: user_data)
  22. current_user.with_lock do
  23. current_user.update!(user_data)
  24. end
  25. current_user
  26. end
  27. end
  28. end