public override async Task <Empty> BatchTransfer(BatchTransferRequest request, Grpc.Core.ServerCallContext context) { if (request.Transfers.Any(r => !accountsRepository.CanTransfer(r.AccountId, r.Recipient, r.Amount))) { throw new ArgumentException("Cannot transfer founds."); } var transferRequests = request.Transfers.Select(r => CreateRequest(r)); var batchAddTransactionsRequest = new BatchCreateTransactionRequest { Requests = { transferRequests } }; var result = await transactionsClient.BatchCreateAsync(batchAddTransactionsRequest, context.RequestHeaders.SelectCustom()); var affectedAccounts = ApplyBatchToRepository(request).ToArray(); if (affectedAccounts.Length > 0) { projectionChannel.Publish(context.RequestHeaders.GetFlowId(), new DataProjection <Models.Account, string> { Upsert = affectedAccounts }); } return(new Empty()); }
public override Task <BatchCreateTransactionResult> BatchCreate(BatchCreateTransactionRequest request, ServerCallContext context) { var transactions = request.Requests .Select(r => transactionsRepository.Create(r.Title, r.Amount, r.Recipient, r.Sender, r.PaymentId, r.CardId)) .Select(transaction => mapper.Map <Transaction>(transaction)) .ToArray(); return(Task.FromResult(new BatchCreateTransactionResult { Transactions = { transactions } })); }
public override Task <Empty> BatchCreate(BatchCreateTransactionRequest request, ServerCallContext context) { var transactions = request.Requests.Select(r => transactionsRepository.Create(r.Title, r.Amount, r.Recipient, r.Sender, r.PaymentId, r.CardId)).ToArray(); if (transactions.Length > 0) { projectionChannel.Publish(context.RequestHeaders.GetFlowId(), new DataProjection <Models.Transaction, string> { Upsert = transactions }); } var response = transactions.Select(transaction => mapper.Map <Transaction>(transaction)) .ToArray(); return(Task.FromResult(new Empty())); }
public override async Task <Empty> BatchTransfer(BatchTransferRequest request, Grpc.Core.ServerCallContext context) { if (request.Transfers.Any(r => !accountsRepository.CanTransfer(r.AccountId, r.Recipient, r.Amount))) { throw new ArgumentException("Cannot transfer founds."); } var transferRequests = request.Transfers.Select(r => CreateRequest(r)); var batchAddTransactionsRequest = new BatchCreateTransactionRequest { Requests = { transferRequests } }; var result = await transactionsClient.BatchCreateAsync(batchAddTransactionsRequest, context.RequestHeaders.SelectCustom()); foreach (var t in request.Transfers) { accountsRepository.Transfer(t.AccountId, t.Recipient, t.Amount); } return(new Empty()); }