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 }); }
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 }; }