Initial commit

This commit is contained in:
Yaser
2026-08-13 19:50:53 +03:30
commit 38084458fe
879 changed files with 95198 additions and 0 deletions

View File

@@ -0,0 +1,124 @@
# 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