search_controller.rb 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. class SearchController < ApplicationController
  3. prepend_before_action :authentication_check
  4. # GET|POST /api/v1/search
  5. # GET|POST /api/v1/search/:objects
  6. def search_generic
  7. # get params
  8. query = params[:query]
  9. if query.respond_to?(:permit!)
  10. query = query.permit!.to_h
  11. end
  12. limit = params[:limit] || 10
  13. # convert objects string into array of class names
  14. # e.g. user-ticket-another_object = %w( User Ticket AnotherObject )
  15. objects = if params[:objects]
  16. params[:objects].split('-').map(&:camelize)
  17. else
  18. Setting.get('models_searchable')
  19. end
  20. assets = {}
  21. result = []
  22. execute_service(
  23. SearchService,
  24. term: query,
  25. objects: objects.map(&:constantize),
  26. options: { limit: limit, ids: params[:ids] },
  27. ).each do |item|
  28. assets = item.assets(assets)
  29. result << {
  30. type: item.class.to_app_model.to_s,
  31. id: item[:id],
  32. }
  33. end
  34. render json: {
  35. assets: assets,
  36. result: result,
  37. }
  38. end
  39. end