コード例 #1
0
        public async Task Transfer(MessageContext context, TransferEvent inputEvent)
        {
            var card = cardsRepository.GetCard(inputEvent.Transfer.CardId);

            if (card == null)
            {
                throw new ArgumentException("Card not found.");
            }

            var blockRequestTime = DateTime.UtcNow;
            var title            = $"{DateTime.UtcNow} card usage for a transfer worth {inputEvent.Transfer.Amount} EUR";

            var transfer = new Transfer
            {
                AccountId = card.AccountId,
                CardId    = card.Id,
                Recipient = inputEvent.Transfer.Recipient,
                Amount    = inputEvent.Transfer.Amount,
                Title     = title
            };

            var accountTransferEvent = new TransferEvent {
                Transfer = transfer
            };
            var reply = await eventsAwaiter.AwaitResponse <SelectedTransactionsEvent>(context.FlowId, () => publishingRouter.Publish(Queues.Accounts, accountTransferEvent, context.FlowId, Queues.Cards));

            var transaction = reply.Transactions.Single();

            cardsRepository.CreateBlock(card.Id, transaction.Id, blockRequestTime);
            if (context.ReplyTo != null)
            {
                publishingRouter.Publish(context.ReplyTo, reply, context.FlowId);
            }
        }
        public override async Task <TransferResponse> Transfer(TransferRequest request, ServerCallContext context)
        {
            var card = cardsRepository.GetCard(request.CardId);

            if (card == null)
            {
                throw new ArgumentException("Card not found.");
            }

            var blockRequestTime = DateTime.UtcNow;
            var title            = $"{DateTime.UtcNow} card usage for a transfer worth {request.Amount} EUR";

            var transfer = new Transfer
            {
                AccountId = card.AccountId,
                CardId    = card.Id,
                Recipient = request.Recipient,
                Amount    = request.Amount,
                Title     = title
            };
            var transferRequest = new AccountsWriteMicroservice.TransferRequest {
                Transfer = transfer,
            };

            var transferResponse = await accountsClient.TransferAsync(transferRequest, context.RequestHeaders.SelectCustom());

            var block  = cardsRepository.CreateBlock(card.Id, transferResponse.Transaction.Id, blockRequestTime);
            var upsert = new CardsUpsert {
                Block = block
            };

            projectionChannel.Publish(context.RequestHeaders.GetFlowId(), new DataProjection <CardsUpsert, string> {
                Upsert = new[] { upsert }
            });

            return(new TransferResponse {
                Transaction = transferResponse.Transaction
            });
        }
コード例 #3
0
        public override async Task<TransferResponse> Transfer(TransferRequest request, ServerCallContext context)
        {
            var card = cardsRepository.GetCard(request.CardId);
            if (card == null)
                throw new ArgumentException("Card not found.");

            var blockRequestTime = DateTime.UtcNow;
            var title = $"{DateTime.UtcNow} card usage for a transfer worth {request.Amount} EUR";

            var transfer = new Transfer
            {
                AccountId = card.AccountId,
                CardId = card.Id,
                Recipient = request.Recipient,
                Amount = request.Amount,
                Title = title
            };
            var transferRequest = new AccountsMicroservice.TransferRequest { Transfer = transfer };

            var transferResponse = await accountsClient.TransferAsync(transferRequest, context.RequestHeaders.SelectCustom());
            cardsRepository.CreateBlock(card.Id, transferResponse.Transaction.Id, blockRequestTime);

            return new TransferResponse { Transaction = transferResponse.Transaction };
        }