Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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;
                }
            }
        }