public async Task <CommandHandlingResult> Handle(Commands.SaveTransferOperationStateCommand command, IEventPublisher eventPublisher) { var message = command.QueueMessage; var transactionId = message.Id; var transaction = await _transactionsRepository.FindByTransactionIdAsync(transactionId); if (transaction == null) { _log.Error(nameof(Commands.SaveManualOperationStateCommand), new Exception($"unknown transaction {transactionId}"), context: command); return(CommandHandlingResult.Ok()); } var amountNoFee = await _feeCalculationService.GetAmountNoFeeAsync(message); var context = await _transactionService.GetTransactionContext <TransferContextData>(transactionId) ?? TransferContextData.Create( message.FromClientId, new TransferContextData.TransferModel { ClientId = message.ToClientid }, new TransferContextData.TransferModel { ClientId = message.FromClientId }); context.Transfers[0].OperationId = Guid.NewGuid().ToString(); context.Transfers[1].OperationId = Guid.NewGuid().ToString(); var destWallet = await _walletCredentialsRepository.GetAsync(message.ToClientid); var sourceWallet = await _walletCredentialsRepository.GetAsync(message.FromClientId); var contextJson = context.ToJson(); var cmd = new TransferCommand { Amount = amountNoFee, AssetId = message.AssetId, Context = contextJson, SourceAddress = sourceWallet?.MultiSig, DestinationAddress = destWallet?.MultiSig, TransactionId = Guid.Parse(transactionId) }; await SaveState(cmd, context); eventPublisher.PublishEvent(new TransferOperationStateSavedEvent { TransactionId = transactionId, QueueMessage = message, AmountNoFee = (double)amountNoFee }); return(CommandHandlingResult.Ok()); }
public static Task <decimal> GetAmountNoFeeAsync(this IFeeCalculationService src, TransferQueueMessage message) { return(src.GetAmountNoFeeAsync(message.Amount.ParseAnyDecimal(), message.AssetId, message.Fees, message.ToClientid)); }