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,70 @@
# frozen_string_literal: true
module API
module V2
module Management
class PaymentAddress < Grape::API
desc 'Create payment address' do
@settings[:scope] = :write_payment_addresses
success API::V2::Management::Entities::PaymentAddress
end
params do
requires :uid,
type: String,
values: { value: ->(v) { Member.exists?(uid: v) }, message: 'management.payment_address.uid_doesnt_exist' },
desc: API::V2::Management::Entities::PaymentAddress.documentation[:uid][:desc]
requires :currency,
type: String,
values: { value: -> { Currency.codes(bothcase: true) }, message: 'management.payment_address.currency_doesnt_exist' },
desc: -> { API::V2::Management::Entities::Currency.documentation[:code][:desc] }
optional :remote,
type: { value: Boolean, message: 'management.payment_address.non_boolean_remote' },
desc: API::V2::Management::Entities::PaymentAddress.documentation[:remote][:desc]
end
post '/deposit_address/new' do
member = Member.find_by(uid: params[:uid]) if params[:uid].present?
currency = Currency.find(params[:currency])
unless currency.deposit_enabled?
error!({ errors: ['account.currency.deposit_disabled'] }, 422)
end
wallet = Wallet.deposit_wallet(currency.id)
unless wallet.present?
error!({ errors: ['account.wallet.not_found'] }, 422)
end
unless params[:remote].nil?
pa = member.payment_address!(wallet.id, params[:remote])
else
pa = member.payment_address!(wallet.id)
end
wallet_service = WalletService.new(wallet)
begin
pa.with_lock do
next if pa.address.present?
# Supply address ID in case of BitGo address generation if it exists.
result = wallet_service.create_address!(member.uid, pa.details.merge(updated_at: pa.updated_at))
if result.present?
pa.update!(address: result[:address],
secret: result[:secret],
details: result.fetch(:details, {}).merge(pa.details))
end
end
present pa, with: API::V2::Management::Entities::PaymentAddress
status 200
rescue StandardError => e
::Rails.logger.error { "Error: #{e} while generating payment address for #{params[:currency]} for user: #{params[:uid]}" }
error!({ errors: ['management.payment_address.failed_to_generate'] }, 422)
end
end
end
end
end
end