private IUpdateTransactionCommand MapToUpdateCommand( CompleteOutTxCommand cmd, IPaymentRequestTransaction tx) { switch (tx.TransactionType) { case TransactionType.Payment: return(Mapper.Map <CompletePaymentOutTxCommand>(cmd, MapConfirmed())); case TransactionType.Refund: return(Mapper.Map <CompleteRefundOutTxCommand>(cmd, opt => { opt.Items["Confirmations"] = _transactionConfirmationCount; opt.Items["WalletAddress"] = tx.WalletAddress; })); case TransactionType.Exchange: return(Mapper.Map <CompleteExchangeOutTxCommand>(cmd, MapConfirmed())); case TransactionType.Settlement: return(Mapper.Map <CompleteSettlementOutTxCommand>(cmd, MapConfirmed())); case TransactionType.CashOut: return(Mapper.Map <CompleteCashoutTxCommand>(cmd, MapConfirmed())); default: throw new UnexpectedTransactionTypeException(tx.TransactionType); } }
public async Task CompleteOutgoingAsync(CompleteOutTxCommand cmd) { var txs = (await _transactionsService.GetByBcnIdentityAsync( cmd.Blockchain, cmd.IdentityType, cmd.Identity)).ToList(); if (!txs.Any()) { throw new OutboundTransactionsNotFound(cmd.Blockchain, cmd.IdentityType, cmd.Identity); } foreach (var tx in txs) { _log.Info($"Complete outgoing transaction [type = {tx.TransactionType}]", cmd.ToJson()); IUpdateTransactionCommand updateCommand = MapToUpdateCommand(cmd, tx); await _transactionsService.UpdateAsync(updateCommand); switch (tx.TransactionType) { case TransactionType.Payment: case TransactionType.Refund: await _paymentRequestService.UpdateStatusAsync(tx.WalletAddress); break; case TransactionType.Exchange: var exContext = tx.ContextData.DeserializeJson <ExchangeTransactonContext>(); if (exContext != null) { await _walletHistoryService.SetTxHashAsync(exContext.HistoryOperationId, updateCommand.Hash); } break; case TransactionType.CashOut: var cashoutContext = tx.ContextData.DeserializeJson <CashoutTransactionContext>(); if (cashoutContext != null) { await _walletHistoryService.SetTxHashAsync(cashoutContext.HistoryOperationId, updateCommand.Hash); } await _confirmationsService.ConfirmCashoutAsync(Mapper.Map <CashoutConfirmationCommand>(tx)); break; } } }