Files
Dena/app/api/v2/public/currencies.rb
2026-08-13 19:50:53 +03:30

61 lines
2.1 KiB
Ruby

# encoding: UTF-8
# frozen_string_literal: true
module API
module V2
module Public
class Currencies < Grape::API
helpers ::API::V2::ParamHelpers
desc 'Get a currency' do
success Entities::Currency
end
params do
requires :id,
type: String,
values: { value: -> { Currency.visible.codes(bothcase: true) }, message: 'public.currency.doesnt_exist'},
desc: -> { API::V2::Entities::Currency.documentation[:id][:desc] }
end
get '/currencies/:id', requirements: { id: /[\w\.\-]+/ } do
present Currency.find(params[:id]), with: API::V2::Entities::Currency
end
desc 'Get list of currencies',
is_array: true,
success: Entities::Currency
params do
use :pagination
optional :type,
type: String,
values: { value: %w[fiat coin], message: 'public.currency.invalid_type' },
desc: -> { API::V2::Entities::Currency.documentation[:type][:desc] }
optional :search, type: JSON, default: {} do
optional :code,
type: String,
desc: 'Search by currency code using SQL LIKE'
optional :name,
type: String,
desc: 'Search by currency name using SQL LIKE'
end
end
get '/currencies' do
search_attrs = { m: 'or',
code_cont: params.dig(:search, :code),
name_cont: params.dig(:search, :name) }
present paginate(Rails.cache.fetch("currencies_#{params}", expires_in: 600) do
currencies = Currency.visible.ordered
currencies = currencies.where(type: params[:type]).includes(:blockchain) if params[:type] == 'coin'
currencies = currencies.where(type: params[:type]) if params[:type] == 'fiat'
search = currencies.ransack(search_attrs)
search.result.load.to_a
end), with: API::V2::Entities::Currency
end
end
end
end
end