private async Task ProcessHotWalletCashout(ProcessHotWalletErc20EventCommand queueMessage) { string transactionId = queueMessage.OperationId; CashOutContextData context = await _transactionService.GetTransactionContext <CashOutContextData>(transactionId); if (context == null) { _log.Error(new NullReferenceException("Context is null for hotwallet cashout"), context: queueMessage.ToJson()); return; } string clientId = context.ClientId; string hash = queueMessage.TransactionHash; string cashOperationId = context.CashOperationId; var clientAcc = await _clientAccountClient.GetByIdAsync(clientId); var clientEmail = await _personalDataService.GetEmailAsync(clientId); await _cashOperationsRepositoryClient.UpdateBlockchainHashAsync(clientId, cashOperationId, hash); await _srvEmailsFacade.SendNoRefundOCashOutMail(clientAcc.PartnerId, clientEmail, context.Amount, context.AssetId, hash); }
public async Task Process(HashEvent ev) { var tx = await _bitcoinTransactionRepository.FindByTransactionIdAsync(ev.Id); if (tx == null) { return; } string hash = ev.Hash; switch (tx.CommandType) { case BitCoinCommands.CashOut: var cashOutContext = await _transactionService.GetTransactionContext <CashOutContextData>(tx.TransactionId); var clientAcc = await _сlientAccountClient.GetByIdAsync(cashOutContext.ClientId); var clientEmail = await _personalDataService.GetEmailAsync(cashOutContext.ClientId); await _cashOperationsRepositoryClient.UpdateBlockchainHashAsync(cashOutContext.ClientId, cashOutContext.CashOperationId, hash); await _srvEmailsFacade.SendNoRefundOCashOutMail(clientAcc.PartnerId, clientEmail, cashOutContext.Amount, cashOutContext.AssetId, hash); break; } }
private async Task FinalizeCashOut(IBitcoinTransaction transaction, IOffchainTransfer offchainTransfer) { var amount = Math.Abs((double)offchainTransfer.Amount); var data = await _exchangeOperationsService.FinishCashOutAsync(transaction.TransactionId, offchainTransfer.ClientId, (double)offchainTransfer.Amount, offchainTransfer.AssetId); await CreateHubCashoutIfNeed(offchainTransfer); if (!data.IsOk()) { await _log.WriteWarningAsync("CashOutController", "CashOut", data.ToJson(), "ME operation failed"); await _srvSlackNotifications.SendNotification(ChannelTypes.Errors, $"Cashout failed in ME, client: {offchainTransfer.ClientId}, transfer: {transaction.TransactionId}, ME code result: {data.Code}"); } var contextData = await _bitcoinTransactionService.GetTransactionContext <CashOutContextData>(transaction.TransactionId); var swiftData = contextData.AddData?.SwiftData; if (swiftData != null) { await _cashOutAttemptRepository.SetIsSettledOffchain(contextData.ClientId, swiftData.CashOutRequestId); } else { if (offchainTransfer.AssetId == LykkeConstants.SolarAssetId) { await PostSolarCashOut(offchainTransfer.ClientId, contextData.Address, amount, transaction.TransactionId); } else if (offchainTransfer.AssetId == LykkeConstants.ChronoBankAssetId) { await PostChronoBankCashOut(contextData.Address, amount, transaction.TransactionId); } else if (offchainTransfer.AssetId == LykkeConstants.QuantaAssetId) { await PostQuantaCashOut(contextData.Address, amount, transaction.TransactionId); } else { var clientData = await _personalDataService.GetAsync(contextData.ClientId); await _srvEmailsFacade.SendNoRefundOCashOutMail(clientData.Email, contextData.Amount, contextData.AssetId, transaction.BlockchainHash); } } }