59 lines
1.7 KiB
Ruby
59 lines
1.7 KiB
Ruby
# encoding: UTF-8
|
|
# frozen_string_literal: true
|
|
|
|
module Workers
|
|
module AMQP
|
|
class DepositCoinAddress < Base
|
|
def process(payload)
|
|
payload.symbolize_keys!
|
|
|
|
member = Member.find_by_id(payload[:member_id])
|
|
unless member
|
|
Rails.logger.warn do
|
|
'Unable to generate deposit address.'\
|
|
"Member with id: #{payload[:member_id]} doesn't exist"
|
|
end
|
|
return
|
|
end
|
|
|
|
wallet = Wallet.find_by_id(payload[:wallet_id])
|
|
|
|
unless wallet
|
|
Rails.logger.warn do
|
|
'Unable to generate deposit address.'\
|
|
"Deposit Wallet with id: #{payload[:wallet_id]} doesn't exist"
|
|
end
|
|
return
|
|
end
|
|
|
|
wallet_service = WalletService.new(wallet)
|
|
|
|
member.payment_address(wallet.id).tap do |pa|
|
|
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
|
|
|
|
pa.trigger_address_event unless pa.address.blank?
|
|
end
|
|
|
|
# Don't re-enqueue this job in case of error.
|
|
# The system is designed in such way that when user will
|
|
# request list of accounts system will ask to generate address again (if it is not generated of course).
|
|
rescue StandardError => e
|
|
raise e if is_db_connection_error?(e)
|
|
|
|
report_exception(e)
|
|
end
|
|
end
|
|
end
|
|
end
|