recently_viewed.rb 1.0 KB

123456789101112131415161718192021222324252627
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. module Gql::Queries
  3. class Tickets::RecentlyViewed < BaseQuery
  4. description 'Fetch tickets recently viewed by the current user'
  5. argument :except_ticket_internal_id, Integer, required: false, description: 'Optional ticket ID to be filtered out from results'
  6. argument :limit, Integer, required: false, description: 'Limit for the amount of entries'
  7. type [Gql::Types::TicketType], null: false
  8. def self.authorize(_obj, ctx)
  9. ctx.current_user.permissions?(['ticket.agent'])
  10. end
  11. def resolve(except_ticket_internal_id: nil, limit: 8)
  12. ::RecentView.list(context.current_user, limit + 1, 'Ticket').select do |recent_view|
  13. !except_ticket_internal_id || recent_view.o_id != except_ticket_internal_id
  14. end.map do |recent_view|
  15. ::Ticket.lookup(id: recent_view.o_id)
  16. end.select do |recent_ticket|
  17. ::TicketPolicy.new(context.current_user, recent_ticket).agent_read_access?
  18. end.first(limit)
  19. end
  20. end
  21. end