private Task ProcessMessageAsync(CashInEvent message)
        {
            var fees   = message.CashIn.Fees;
            var fee    = fees?.FirstOrDefault()?.Transfer;
            var @event = new CashInProcessedEvent
            {
                OperationId = Guid.Parse(message.Header.RequestId),
                RequestId   = Guid.Parse(message.Header.MessageId),
                WalletId    = Guid.Parse(message.CashIn.WalletId),
                Volume      = decimal.Parse(message.CashIn.Volume),
                AssetId     = message.CashIn.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(CashInEvent message)
        {
            var fees   = message.CashIn.Fees;
            var fee    = fees?.FirstOrDefault()?.Transfer;
            var @event = new CashInProcessedEvent
            {
                OperationId = Guid.Parse(message.Header.RequestId),
                RequestId   = Guid.Parse(message.Header.MessageId),
                WalletId    = Guid.Parse(message.CashIn.WalletId),
                Volume      = decimal.Parse(message.CashIn.Volume),
                AssetId     = message.CashIn.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);
            }

            await _lykkeMailerliteClient.Customers.UpdateDepositAsync(new UpdateCustomerDepositRequest
            {
                CustomerId = message.CashIn.WalletId, RequestId = Guid.NewGuid().ToString(), Timestamp = message.Header.Timestamp.ToTimestamp()
            });
        }
        public async Task <CommandHandlingResult> Handle(CashInProcessedEvent @event)
        {
            var entity = Mapper.Map <Cashin>(@event);

            if (!await _historyRecordsRepository.TryInsertAsync(entity))
            {
                _logger.Warning($"Skipped duplicated cashin record", context: new
                {
                    id = @event.OperationId
                });
            }

            return(CommandHandlingResult.Ok());
        }
Exemple #4
0
        private CashInProcessedEvent CreateCashinRecord()
        {
            var cqrs = _container.Resolve <ICqrsEngine>();

            var id       = Guid.NewGuid();
            var clientId = Guid.NewGuid();
            var volume   = 54.31M;

            var @event = new CashInProcessedEvent
            {
                OperationId = id,
                WalletId    = clientId,
                Volume      = volume,
                AssetId     = "EUR",
                Timestamp   = DateTime.UtcNow,
                FeeSize     = 10
            };

            cqrs.PublishEvent(@event, PostProcessingBoundedContext.Name);

            return(@event);
        }