Example #1
0
        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 }
            }));
        }
Example #3
0
        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()));
        }
Example #4
0
        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());
        }