Files
sure/app/controllers/exchange_rates_controller.rb
2026-04-08 21:05:58 +02:00

37 lines
1.2 KiB
Ruby

class ExchangeRatesController < ApplicationController
def show
# Pure currency-to-currency exchange rate lookup
unless params[:from].present? && params[:to].present?
return render json: { error: "from and to currencies are required" }, status: :bad_request
end
from_currency = params[:from].upcase
to_currency = params[:to].upcase
# Same currency returns 1.0
if from_currency == to_currency
return render json: { rate: 1.0, same_currency: true }
end
# Parse date
begin
date = params[:date].present? ? Date.parse(params[:date]) : Date.current
rescue ArgumentError, TypeError
return render json: { error: "Invalid date format" }, status: :bad_request
end
begin
rate_obj = ExchangeRate.find_or_fetch_rate(from: from_currency, to: to_currency, date: date)
rescue StandardError
return render json: { error: "Failed to fetch exchange rate" }, status: :bad_request
end
if rate_obj.nil?
return render json: { error: "Exchange rate not found" }, status: :not_found
end
rate_value = rate_obj.is_a?(Numeric) ? rate_obj : rate_obj.rate
render json: { rate: rate_value.to_f }
end
end