zammad/zammad

View on GitHub
app/controllers/search_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
# 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