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 async Task Transfer(AccountTransfer data) { var transfer = mapper.Map<Transfer>(data); var request = new TransferRequest { Transfer = transfer }; await accountsWriteClient.TransferAsync(request, HttpContext.CreateHeadersWithFlowId()); }