public async Task RegisterInboundAsync(RegisterInTxCommand cmd) { await ValidateWalletAddressHosterAsync(cmd.ToAddress, cmd.Blockchain); var txs = (await _transactionsService.GetByBcnIdentityAsync( cmd.Blockchain, cmd.IdentityType, cmd.Identity)).ToList(); if (!txs.Any()) { _log.Info($"Incoming transaction registration [workflow = {cmd.WorkflowType}]", cmd.ToJson()); ICreateTransactionCommand createCommand = MapToCreateCommand(cmd); await _transactionsService.CreateTransactionAsync(createCommand); switch (cmd.WorkflowType) { case WorkflowType.LykkePay: await _paymentRequestService.UpdateStatusAsync(createCommand.WalletAddress); break; case WorkflowType.Airlines: await _walletHistoryService.PublishCashInAsync(Mapper.Map <WalletHistoryCommand>(cmd)); break; } return; } foreach (var tx in txs) { _log.Info($"Incoming transaction update [type={tx.TransactionType}]", cmd); IUpdateTransactionCommand updateCommand = MapToUpdateCommand(cmd, tx.TransactionType); await _transactionsService.UpdateAsync(updateCommand); switch (tx.TransactionType) { case TransactionType.Payment: await _paymentRequestService.UpdateStatusAsync(tx.WalletAddress); break; case TransactionType.Exchange: var context = tx.ContextData.DeserializeJson <ExchangeTransactonContext>(); if (context != null) { await _walletHistoryService.SetTxHashAsync(context.HistoryOperationId, cmd.Hash); } break; } } }
private ICreateTransactionCommand MapToCreateCommand(RegisterInTxCommand cmd) { switch (cmd.WorkflowType) { case WorkflowType.LykkePay: return(Mapper.Map <CreateTransactionCommand>(cmd, MapConfirmed())); case WorkflowType.Airlines: return(Mapper.Map <RegisterCashinTxCommand>(cmd, MapConfirmed())); default: throw new UnexpectedWorkflowTypeException(cmd.WorkflowType); } }
private IUpdateTransactionCommand MapToUpdateCommand( RegisterInTxCommand cmd, TransactionType transactionType) { switch (transactionType) { case TransactionType.Payment: return(Mapper.Map <UpdateTransactionCommand>(cmd, MapConfirmed())); case TransactionType.Exchange: return(Mapper.Map <UpdateExchangeInTxCommand>(cmd, MapConfirmed())); case TransactionType.Settlement: return(Mapper.Map <UpdateSettlementInTxCommand>(cmd, MapConfirmed())); default: throw new UnexpectedTransactionTypeException(transactionType); } }