177 lines
4.6 KiB
Ruby
177 lines
4.6 KiB
Ruby
# encoding: UTF-8
|
|
# frozen_string_literal: true
|
|
|
|
module API
|
|
module V2
|
|
module Management
|
|
module Entities
|
|
class Order < Base
|
|
expose(
|
|
:id,
|
|
documentation:{
|
|
type: Integer,
|
|
desc: "Unique order id."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:member_id,
|
|
documentation:{
|
|
type: Integer,
|
|
desc: "Member id."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:uuid,
|
|
documentation:{
|
|
type: String,
|
|
desc: "Unique order UUID."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:side,
|
|
documentation: {
|
|
type: String,
|
|
desc: "Either 'sell' or 'buy'."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:ord_type,
|
|
documentation: {
|
|
type: String,
|
|
desc: "Type of order, either 'limit' or 'market'."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:price,
|
|
documentation: {
|
|
type: BigDecimal,
|
|
desc: "Price for each unit. e.g."\
|
|
"If you want to sell/buy 1 btc at 3000 usd, the price is '3000.0'"
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:avg_price,
|
|
documentation: {
|
|
type: BigDecimal,
|
|
desc: "Average execution price, average of price in trades."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:state,
|
|
documentation: {
|
|
type: String,
|
|
desc: "One of 'wait', 'done', or 'cancel'."\
|
|
"An order in 'wait' is an active order, waiting fulfillment;"\
|
|
"a 'done' order is an order fulfilled;"\
|
|
"'cancel' means the order has been canceled."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:market_id,
|
|
as: :market,
|
|
documentation: {
|
|
type: String,
|
|
desc: "The market in which the order is placed, e.g. 'btcusd'."\
|
|
"All available markets can be found at /api/v2/markets."
|
|
}
|
|
)
|
|
|
|
|
|
expose(
|
|
:created_at,
|
|
format_with: :iso8601,
|
|
documentation: {
|
|
type: String,
|
|
desc: "Order create time in iso8601 format."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:updated_at,
|
|
format_with: :iso8601,
|
|
documentation: {
|
|
type: String,
|
|
desc: "Order updated time in iso8601 format."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:origin_volume,
|
|
documentation: {
|
|
type: BigDecimal,
|
|
desc: "The amount user want to sell/buy."\
|
|
"An order could be partially executed,"\
|
|
"e.g. an order sell 5 btc can be matched with a buy 3 btc order,"\
|
|
"left 2 btc to be sold; in this case the order's volume would be '5.0',"\
|
|
"its remaining_volume would be '2.0', its executed volume is '3.0'."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:volume,
|
|
as: :remaining_volume,
|
|
documentation: {
|
|
type: BigDecimal,
|
|
desc: "The remaining volume, see 'volume'."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:executed_volume,
|
|
documentation: {
|
|
type: BigDecimal,
|
|
desc: "The executed volume, see 'volume'."
|
|
}
|
|
) do |order, _options|
|
|
order.origin_volume - order.volume
|
|
end
|
|
|
|
expose(
|
|
:maker_fee,
|
|
documentation: {
|
|
type: BigDecimal,
|
|
desc: "Fee for maker."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:taker_fee,
|
|
documentation: {
|
|
type: BigDecimal,
|
|
desc: "Fee for taker."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:trades_count,
|
|
documentation: {
|
|
type: Integer,
|
|
desc: "Count of trades."
|
|
}
|
|
)
|
|
|
|
expose(
|
|
:trades,
|
|
documentation: {
|
|
type: 'API::V2::Entities::Trade',
|
|
is_array: true,
|
|
desc: "Trades wiht this order."
|
|
},
|
|
if: { type: :full }
|
|
) do |order, _options|
|
|
API::V2::Entities::Trade.represent order.trades, side: order.side
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|