dawarich/app/controllers/api/v1/locations_controller.rb
2025-08-30 23:18:16 +02:00

56 lines
No EOL
1.5 KiB
Ruby

# frozen_string_literal: true
class Api::V1::LocationsController < ApiController
before_action :validate_search_params, only: [:index]
def index
if search_query.present?
search_results = LocationSearch::PointFinder.new(current_api_user, search_params).call
render json: LocationSearchResultSerializer.new(search_results).call
else
render json: { error: 'Search query parameter (q) is required' }, status: :bad_request
end
rescue StandardError => e
Rails.logger.error "Location search error: #{e.message}"
Rails.logger.error e.backtrace.join("\n")
render json: { error: 'Search failed. Please try again.' }, status: :internal_server_error
end
private
def search_query
params[:q]&.strip
end
def search_params
{
query: search_query,
limit: params[:limit]&.to_i || 50,
date_from: parse_date(params[:date_from]),
date_to: parse_date(params[:date_to]),
radius_override: params[:radius_override]&.to_i
}
end
def validate_search_params
if search_query.blank?
render json: { error: 'Search query parameter (q) is required' }, status: :bad_request
return false
end
if search_query.length > 200
render json: { error: 'Search query too long (max 200 characters)' }, status: :bad_request
return false
end
true
end
def parse_date(date_string)
return nil if date_string.blank?
Date.parse(date_string)
rescue ArgumentError
nil
end
end