ticket.rb 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. module Gql::Queries
  3. class Ticket < BaseQuery
  4. description 'Fetch a ticket by ID'
  5. def self.authorize(_obj, ctx)
  6. # Pundit authorization will be done via TicketType.
  7. ctx.current_user
  8. end
  9. argument :ticket_id, GraphQL::Types::ID, required: false, description: 'Ticket ID'
  10. argument :ticket_internal_id, Integer, required: false, description: 'Ticket internalId'
  11. argument :ticket_number, String, required: false, description: 'Ticket number'
  12. type Gql::Types::TicketType, null: false
  13. def resolve(ticket_id: nil, ticket_internal_id: nil, ticket_number: nil)
  14. if ticket_id
  15. return Gql::ZammadSchema.verified_object_from_id(ticket_id, type: ::Ticket)
  16. end
  17. if ticket_internal_id
  18. return ::Ticket.find_by(id: ticket_internal_id) || raise(ActiveRecord::RecordNotFound, "The ticket #{ticket_internal_id} could not be found.")
  19. end
  20. if ticket_number
  21. return ::Ticket.find_by(number: ticket_number) || raise(ActiveRecord::RecordNotFound, "The ticket ##{ticket_number} could not be found.")
  22. end
  23. raise __("One of the arguments 'ticket_id', 'ticket_internal_id' or 'ticket_number' must be provided.")
  24. end
  25. end
  26. end