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

44 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module API
module V2
module CoinGecko
class HistoricalTrades < Grape::API
desc 'Get recent trades on market'
params do
requires :ticker_id,
type: String,
desc: 'A pair such as "LTC_BTC"',
coerce_with: ->(name) { name.strip.split('_').join.downcase }
optional :type,
type: String,
values: { value: %w(buy sell), message: 'coingecko.historical_trades.invalid_type' },
desc: 'To indicate nature of trade - buy/sell'
optional :limit,
type: Integer,
values: { value: 0..1000, message: 'coingecko.historical_trades.invalid_limit' },
desc: 'Number of historical trades to retrieve from time of query. [0, 200, 500...]. 0 returns full history'
optional :start_time,
type: Integer,
desc: '',
coerce_with: ->(start_time) { Time.parse(start_time).to_i }
optional :end_time,
type: Integer,
desc: '',
coerce_with: ->(end_time) { Time.parse(end_time).to_i }
end
get '/historical_trades' do
market = ::Market.find(params[:ticker_id])
filters = declared(params, include_missing: false)
.except(:ticker_id, :limit)
Trade.public_from_influx(market.id, params[:limit], filters).each_with_object({'buy' => [], 'sell' => []}) do |trade, hash|
hash[trade[:taker_type]] << format_trade(trade)
end
end
end
end
end
end