Initial commit
This commit is contained in:
70
app/api/v2/management/payment_address.rb
Normal file
70
app/api/v2/management/payment_address.rb
Normal 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
|
||||
Reference in New Issue
Block a user