private Task ProcessMessageAsync(CashOutEvent message)
        {
            var fees   = message.CashOut.Fees;
            var fee    = fees?.FirstOrDefault()?.Transfer;
            var @event = new CashOutProcessedEvent
            {
                OperationId = Guid.Parse(message.Header.RequestId),
                RequestId   = Guid.Parse(message.Header.MessageId),
                WalletId    = Guid.Parse(message.CashOut.WalletId),
                Volume      = decimal.Parse(message.CashOut.Volume),
                AssetId     = message.CashOut.AssetId,
                Timestamp   = message.Header.Timestamp,
                FeeSize     = ParseNullabe(fee?.Volume)
            };

            _cqrsEngine.PublishEvent(@event, BoundedContext.Name);

            if (fees != null)
            {
                var feeEvent = new FeeChargedEvent
                {
                    OperationId   = message.Header.MessageId,
                    OperationType = FeeOperationType.CashInOut,
                    Fee           = fees.Where(x => x.Transfer != null).Select(x => x.Transfer).ToJson()
                };
                _cqrsEngine.PublishEvent(feeEvent, BoundedContext.Name);
            }

            return(Task.CompletedTask);
        }
        private async Task ProcessMessageAsync(CashOutEvent message)
        {
            var fees = message.CashOut.Fees;
            var fee  = fees?.FirstOrDefault()?.Transfer;

            var entity = new Cashout()
            {
                //BlockchainHash = ,
                FeeSize   = ParseNullabe(fee?.Volume),
                State     = HistoryState.Finished,
                Id        = Guid.Parse(message.Header.RequestId),
                WalletId  = Guid.Parse(message.CashOut.WalletId),
                AssetId   = message.CashOut.AssetId,
                Timestamp = message.Header.Timestamp,
                Volume    = -Math.Abs(decimal.Parse(message.CashOut.Volume))
            };

            if (!await _historyRecordsRepository.TryInsertAsync(entity))
            {
                _log.Warning($"Skipped duplicated cashout record", context: new
                {
                    id = message.Header.RequestId
                });
            }
        }
Example #3
0
 private CashInOutQueueMessage ToOld(CashOutEvent cashOutEvent)
 {
     return(new CashInOutQueueMessage
     {
         Id = cashOutEvent.Header.MessageId,
         ClientId = cashOutEvent.CashOut.WalletId,
         Amount = cashOutEvent.CashOut.Volume.StartsWith('-') ? cashOutEvent.CashOut.Volume : $"-{cashOutEvent.CashOut.Volume}",
         AssetId = cashOutEvent.CashOut.AssetId,
         Date = cashOutEvent.Header.Timestamp,
         Fees = cashOutEvent.CashOut.Fees?.ToOldFees(cashOutEvent.Header.Timestamp),
     });
 }
Example #4
0
 private async Task ProcessMessageAsync(CashOutEvent item)
 {
     try
     {
         await _cashOperationsCollector.AddDataItemAsync(
             new Service.Limitations.Core.Domain.CashOperation
         {
             Id       = item.Header.MessageId ?? item.Header.RequestId,
             ClientId = item.CashOut.WalletId,
             Asset    = item.CashOut.AssetId,
             Volume   = double.Parse(item.CashOut.Volume),
             DateTime = item.Header.Timestamp
         });
     }
     catch (Exception ex)
     {
         _log.Error(ex, context: item);
         throw;
     }
 }
Example #5
0
 private Task ProcessMessageAsync(CashOutEvent message)
 {
     UpdateBalances(message.Header, message.BalanceUpdates);
     UpdateTotalBalances(message.Header, message.BalanceUpdates);
     return(Task.CompletedTask);
 }
Example #6
0
 private async Task ProcessCashoutMessage(CashOutEvent cashoutEvent)
 {
     var message = ToOld(cashoutEvent);
     await _messageProcessor.ProcessMessage(message);
 }