public async Task Process(BatchProcess data)
        {
            var flowId      = HttpContext.Items["flowId"].ToString();
            var messages    = data.Messages.Select(m => mapper.Map <Message>(m)).ToArray();
            var transfers   = data.Transfers.Select(t => mapper.Map <Transfer>(t)).ToArray();;
            var instalments = data.RepaidInstalmentsIds;

            var parallelTasks = new List <Task>();

            if (messages.Length > 0)
            {
                parallelTasks.Add(Task.Run(async() =>
                {
                    await usersClient.BatchAddMessagesAsync(new BatchAddMessagesRequest {
                        Messages = { messages }
                    }, HttpContext.CreateHeadersWithFlowId());
                }));
            }

            if (transfers.Length > 0)
            {
                parallelTasks.Add(Task.Run(async() =>
                {
                    await accountsWriteClient.BatchTransferAsync(new BatchTransferRequest {
                        Transfers = { transfers }
                    }, HttpContext.CreateHeadersWithFlowId());
                }));
            }

            if (data.ProcessedPaymentsIds.Length > 0)
            {
                parallelTasks.Add(Task.Run(async() =>
                {
                    var request = new UpdateLatestProcessingTimestampRequest {
                        Ids = { data.ProcessedPaymentsIds }, LatestProcessingTimestamp = data.ProcessingTimestamp.ToNullableTimestamp()
                    };
                    await paymentsWriteClient.UpdateLatestProcessingTimestampAsync(request, HttpContext.CreateHeadersWithFlowId());
                }));
            }

            if (instalments.Length > 0)
            {
                parallelTasks.Add(Task.Run(async() =>
                {
                    await loansWriteClient.BatchRepayInstalmentsAsync(new BatchRepayInstalmentsRequest {
                        Ids = { instalments }
                    }, HttpContext.CreateHeadersWithFlowId());
                }));
            }

            if (parallelTasks.Count > 0)
            {
                await Task.WhenAll(parallelTasks);
            }
        }
Exemple #2
0
        public override Task <Empty> UpdateLatestProcessingTimestamp(UpdateLatestProcessingTimestampRequest request, ServerCallContext context)
        {
            paymentsRepository.UpdateLastRepayTimestamp(request.Ids, request.LatestProcessingTimestamp.ToDateTime());
            var updatedPayments = request.Ids.Select(id => paymentsRepository.Get(id)).ToArray();

            if (updatedPayments.Length > 0)
            {
                projectionChannel.Publish(context.RequestHeaders.GetFlowId(), new DataProjection <Models.Payment, string> {
                    Upsert = updatedPayments
                });
            }
            return(Task.FromResult(new Empty()));
        }
Exemple #3
0
 public override Task <Empty> UpdateLatestProcessingTimestamp(UpdateLatestProcessingTimestampRequest request, ServerCallContext context)
 {
     paymentsRepository.UpdateProcessingTimestamp(request.Ids, request.LatestProcessingTimestamp.ToDateTime());
     return(Task.FromResult(new Empty()));
 }