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());
        }
Exemplo n.º 2
0
 public static Task <decimal> GetAmountNoFeeAsync(this IFeeCalculationService src, TransferQueueMessage message)
 {
     return(src.GetAmountNoFeeAsync(message.Amount.ParseAnyDecimal(), message.AssetId, message.Fees, message.ToClientid));
 }