44 lines
1.7 KiB
Ruby
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
|