1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class SearchController < ApplicationController
- prepend_before_action :authentication_check
- # GET|POST /api/v1/search
- # GET|POST /api/v1/search/:objects
- def search_generic
- # get params
- query = params[:query]
- if query.respond_to?(:permit!)
- query = query.permit!.to_h
- end
- limit = params[:limit] || 10
- # convert objects string into array of class names
- # e.g. user-ticket-another_object = %w( User Ticket AnotherObject )
- objects = if params[:objects]
- params[:objects].split('-').map { |x| x.camelize.constantize }
- else
- Models.searchable
- end
- assets = {}
- result = []
- Service::Search.new(current_user: current_user).execute(
- term: query,
- objects: objects,
- options: { limit: limit, ids: params[:ids] },
- ).each do |item|
- assets = item.assets(assets)
- result << {
- type: item.class.to_app_model.to_s,
- id: item[:id],
- }
- end
- render json: {
- assets: assets,
- result: result,
- }
- end
- end
|