113 lines
4.3 KiB
Ruby
113 lines
4.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API
|
|
module V2
|
|
module Management
|
|
class Orders < Grape::API
|
|
helpers ::API::V2::OrderHelpers
|
|
|
|
desc 'Returns orders' do
|
|
@settings[:scope] = :read_orders
|
|
success API::V2::Management::Entities::Order
|
|
end
|
|
params do
|
|
optional :uid,
|
|
values: { value: ->(v) { Member.exists?(uid: v) }, message: 'management.orders.uid_doesnt_exist' },
|
|
desc: 'Filter order by owner uid'
|
|
optional :market,
|
|
values: { value: -> { ::Market.ids }, message: 'management.orders.market_doesnt_exist' },
|
|
desc: -> { API::V2::Management::Entities::Market.documentation[:id][:desc] }
|
|
optional :state,
|
|
values: { value: -> { ::Order.state.values }, message: 'management.orders.invalid_state' },
|
|
desc: 'Filter order by state.'
|
|
optional :ord_type,
|
|
values: { value: ::Order::TYPES, message: 'management.orders.invalid_ord_type' },
|
|
desc: 'Filter order by ord_type.'
|
|
end
|
|
post '/orders' do
|
|
if params[:uid].present?
|
|
member = Member.find_by(uid: params[:uid])
|
|
params.merge!(member_id: member.id) if member.present?
|
|
end
|
|
|
|
ransack_params = API::V2::Admin::Helpers::RansackBuilder.new(params)
|
|
.eq(:ord_type, :state, :member_id)
|
|
.translate(market: :market_id)
|
|
.build
|
|
|
|
search = Order.ransack(ransack_params)
|
|
|
|
present search.result, with: API::V2::Management::Entities::Order
|
|
status 200
|
|
end
|
|
|
|
desc 'Cancel specific order' do
|
|
@settings[:scope] = :write_orders
|
|
success API::V2::Management::Entities::Order
|
|
end
|
|
params do
|
|
requires :id,
|
|
type: String,
|
|
allow_blank: false,
|
|
desc: -> { API::V2::Management::Entities::Order.documentation[:id][:desc] }
|
|
end
|
|
|
|
post '/orders/:id/cancel' do
|
|
begin
|
|
order = Order.find(params[:id])
|
|
order.trigger_cancellation
|
|
present order, with: API::V2::Management::Entities::Order
|
|
status 200
|
|
rescue ActiveRecord::RecordNotFound => e
|
|
# RecordNotFound in rescued by ExceptionsHandler.
|
|
raise(e)
|
|
rescue
|
|
error!({ errors: ['management.order.cancel_error'] }, 422)
|
|
end
|
|
end
|
|
|
|
desc 'Cancel all open orders' do
|
|
@settings[:scope] = :write_orders
|
|
success API::V2::Management::Entities::Order
|
|
end
|
|
params do
|
|
optional :uid,
|
|
values: { value: ->(v) { Member.exists?(uid: v) }, message: 'management.orders.uid_doesnt_exist' },
|
|
desc: 'Filter order by owner uid'
|
|
requires :market,
|
|
values: { value: -> { ::Market.active.ids }, message: 'management.order.market_doesnt_exist' },
|
|
desc: -> { API::V2::Management::Entities::Market.documentation[:id][:desc] }
|
|
end
|
|
|
|
post '/orders/cancel' do
|
|
if params[:uid].present?
|
|
member = Member.find_by(uid: params[:uid])
|
|
params.merge!(member_id: member.id) if member.present?
|
|
end
|
|
|
|
market = ::Market.find(params[:market])
|
|
market_engine = market.engine
|
|
|
|
if market_engine.peatio_engine?
|
|
ransack_params = API::V2::Admin::Helpers::RansackBuilder.new(params)
|
|
.eq(:member_id, state: 'wait')
|
|
.translate(market: :market_id)
|
|
.build
|
|
|
|
orders = Order.ransack(ransack_params).result
|
|
orders.map(&:trigger_internal_cancellation)
|
|
else
|
|
filters = {
|
|
market_id: market.id,
|
|
member_uid: params[:uid]
|
|
}.compact
|
|
|
|
Order.trigger_bulk_cancel_third_party(market_engine.driver, filters)
|
|
end
|
|
status 204
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|