125 lines
6.8 KiB
Ruby
125 lines
6.8 KiB
Ruby
# encoding: UTF-8
|
|
# frozen_string_literal: true
|
|
|
|
module API
|
|
module V2
|
|
module Management
|
|
class Currencies < Grape::API
|
|
# POST: api/v2/management/currencies/list
|
|
desc 'Return currencies list.' do
|
|
@settings[:scope] = :read_currencies
|
|
success API::V2::Management::Entities::Currency
|
|
end
|
|
params do
|
|
optional :type,
|
|
type: String,
|
|
values: { value: %w[fiat coin], message: 'management.currency.invalid_type' },
|
|
desc: -> { API::V2::Entities::Currency.documentation[:type][:desc] }
|
|
end
|
|
post '/currencies/list' do
|
|
currencies = Currency.all
|
|
currencies = currencies.where(type: params[:type]).includes(:blockchain) if params[:type] == 'coin'
|
|
currencies = currencies.where(type: params[:type]) if params[:type] == 'fiat'
|
|
present currencies.ordered, with: API::V2::Entities::Currency
|
|
|
|
status 200
|
|
end
|
|
|
|
# POST: api/v2/management/currencies
|
|
desc 'Returns currency by code.' do
|
|
@settings[:scope] = :read_currencies
|
|
success API::V2::Management::Entities::Currency
|
|
end
|
|
|
|
params do
|
|
requires :code, type: String, desc: 'The currency code.'
|
|
end
|
|
post '/currencies/:code', requirements: { code: /[\w\.\-]+/ } do
|
|
present Currency.find_by!(params.slice(:code)), with: API::V2::Management::Entities::Currency
|
|
end
|
|
|
|
desc 'Update currency.' do
|
|
@settings[:scope] = :write_currencies
|
|
success API::V2::Management::Entities::Currency
|
|
end
|
|
|
|
params do
|
|
requires :id,
|
|
type: String,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:id][:desc] }
|
|
optional :name, desc: -> { API::V2::Management::Entities::Currency.documentation[:name][:desc] }
|
|
optional :deposit_fee,
|
|
type: { value: BigDecimal, message: 'management.currency.non_decimal_deposit_fee' },
|
|
values: { value: -> (p){ p >= 0 }, message: 'management.currency.invalid_deposit_fee' },
|
|
default: 0.0,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:deposit_fee][:desc] }
|
|
optional :min_deposit_amount,
|
|
type: { value: BigDecimal, message: 'management.currency.min_deposit_amount' },
|
|
values: { value: -> (p){ p >= 0 }, message: 'management.currency.invalid_min_deposit_amount' },
|
|
default: 0.0,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:min_deposit_amount][:desc] }
|
|
optional :min_collection_amount,
|
|
type: { value: BigDecimal, message: 'management.currency.non_decimal_min_collection_amount' },
|
|
values: { value: -> (p){ p >= 0 }, message: 'management.currency.invalid_min_collection_amount' },
|
|
default: 0.0,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:min_collection_amount][:desc] }
|
|
optional :withdraw_fee,
|
|
type: { value: BigDecimal, message: 'management.currency.non_decimal_withdraw_fee' },
|
|
values: { value: -> (p){ p >= 0 }, message: 'management.currency.invalid_withdraw_fee' },
|
|
default: 0.0,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:withdraw_fee][:desc] }
|
|
optional :min_withdraw_amount,
|
|
type: { value: BigDecimal, message: 'management.currency.non_decimal_min_withdraw_amount' },
|
|
values: { value: -> (p){ p >= 0 }, message: 'management.currency.invalid_min_withdraw_amount' },
|
|
default: 0.0,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:min_withdraw_amount][:desc] }
|
|
optional :withdraw_limit_24h,
|
|
type: { value: BigDecimal, message: 'management.currency.non_decimal_withdraw_limit_24h' },
|
|
values: { value: -> (p){ p >= 0 }, message: 'management.currency.invalid_withdraw_limit_24h' },
|
|
default: 0.0,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:withdraw_limit_24h][:desc] }
|
|
optional :withdraw_limit_72h,
|
|
type: { value: BigDecimal, message: 'management.currency.non_decimal_withdraw_limit_72h' },
|
|
values: { value: -> (p){ p >= 0 }, message: 'management.currency.invalid_withdraw_limit_72h' },
|
|
default: 0.0,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:withdraw_limit_72h][:desc] }
|
|
optional :position,
|
|
type: { value: Integer, message: 'management.currency.non_integer_position' },
|
|
values: { value: -> (p){ p >= ::Currency::TOP_POSITION }, message: 'management.currency.invalid_position' },
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:position][:desc] }
|
|
optional :options,
|
|
type: { value: JSON, message: 'management.currency.non_json_options' },
|
|
default: {},
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:options][:desc] }
|
|
optional :visible,
|
|
type: { value: Boolean, message: 'management.currency.non_boolean_visible' },
|
|
default: true,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:visible][:desc] }
|
|
optional :deposit_enabled,
|
|
type: { value: Boolean, message: 'management.currency.non_boolean_deposit_enabled' },
|
|
default: true,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:deposit_enabled][:desc] }
|
|
optional :withdrawal_enabled,
|
|
type: { value: Boolean, message: 'management.currency.non_boolean_withdrawal_enabled' },
|
|
default: true,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:withdrawal_enabled][:desc] }
|
|
optional :precision,
|
|
type: { value: Integer, message: 'management.currency.non_integer_base_precision' },
|
|
default: 8,
|
|
desc: -> { API::V2::Management::Entities::Currency.documentation[:precision][:desc] }
|
|
optional :icon_url, desc: -> { API::V2::Management::Entities::Currency.documentation[:icon_url][:desc] }
|
|
end
|
|
put '/currencies/update' do
|
|
currency = ::Currency.find_by!(params.slice(:id))
|
|
if currency.update(declared(params, include_missing: false))
|
|
present currency, with: API::V2::Management::Entities::Currency
|
|
else
|
|
body errors: currency.errors.full_messages
|
|
status 422
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|