public async Task GenerateOverallReport(MessageContext context, AggregateOverallReportDataEvent inputEvent) { var filters = new Filters { TimestampFrom = inputEvent.TimestampFrom, TimestampTo = inputEvent.TimestampTo }; var transactions = transactionsRepository.GetMany(inputEvent.Subject, new Filters { TimestampFrom = inputEvent.TimestampFrom, TimestampTo = inputEvent.TimestampTo }); if (inputEvent.Subject == ReportSubject.Loans) { var accountsIds = transactions.Select(t => t.Sender).ToArray(); var loans = await reportsDataFetcher.GetLoans(context.FlowId + "_l", accountsIds); var loansPayments = loans.Select(l => l.PaymentId).ToHashSet(); transactions = transactions.Where(t => loansPayments.Contains(t.PaymentId)).ToArray(); } var data = new OverallReportData { From = inputEvent.TimestampFrom, To = inputEvent.TimestampTo, Granularity = inputEvent.Granularity, Subject = inputEvent.Subject, Aggregations = inputEvent.Aggregations, Transactions = transactions }; var portions = ReportGenerator.AggregateOverall(data); publishingRouter.Publish(context.ReplyTo, new AggregatedOverallReportEvent { Portions = portions.ToArray() }, context.FlowId); }
public async Task <string> Overall(OverallReportRequest data) { var payload = new AggregateOverallReportDataEvent { Granularity = data.Granularity, TimestampFrom = data.TimestampFrom, TimestampTo = data.TimestampTo, Aggregations = data.Aggregations, Subject = data.Subject, }; var flowId = HttpContext.Items["flowId"].ToString(); var response = await eventsAwaiter.AwaitResponse <AggregatedOverallReportEvent>(flowId, () => publishingRouter.Publish(Queues.Transactions, payload, flowId, Queues.APIGateway)); return(ReportCsvSerializer.SerializerOverallReport(data.Subject, data.TimestampFrom, data.TimestampTo, data.Granularity, response.Portions)); }