search.rb 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. module Gql::Queries
  3. class Search < BaseQuery
  4. description 'Generic object search'
  5. argument :search, String, description: 'What to search for'
  6. argument :only_in, Gql::Types::Enum::SearchableModelsType, description: 'Which model to search in, e.g. Ticket'
  7. argument :limit, Integer, required: false, description: 'How many entries to find at maximum'
  8. argument :offset, Integer, required: false, description: 'Offset to use for pagination'
  9. type Gql::Types::SearchResultType, null: false
  10. def resolve(search:, only_in:, offset: 0, limit: 10)
  11. search_result = Service::Search.new(
  12. current_user: context.current_user,
  13. query: search,
  14. objects: [only_in],
  15. options: { offset:, limit:, }
  16. ).execute.result[only_in]
  17. return { total_count: 0, items: [] } if !search_result
  18. {
  19. total_count: search_result[:total_count],
  20. items: search_result[:objects],
  21. }
  22. end
  23. end
  24. end