public async Task <ReportPortions> GetUserActivityPortions(Metadata headers, string userId, Timestamp from, Timestamp to, Granularity granularity) { var portions = new ReportPortions(); var accountsResponse = await accountsClient.GetUserAccountsAsync(new GetUserAccountsRequest { UserId = userId }, headers); var accountsIds = accountsResponse.Accounts.Select(a => a.Id).ToArray(); var parallelTasks = new List <Task>(); parallelTasks.Add(Task.Run(async() => { var request = new AccountsReadMicroservice.AggregateUserActivityRequest { UserId = userId, TimestampFrom = from, TimestampTo = to, Granularity = granularity }; var response = await accountsClient.AggregateUserActivityAsync(request, headers); portions.Accounts = response.Portions.ToArray(); })); parallelTasks.Add(Task.Run(async() => { var request = new PaymentsReadMicroservice.AggregateUserActivityRequest { AccountsIds = { accountsIds }, TimestampFrom = from, TimestampTo = to, Granularity = granularity }; var response = await paymentsClient.AggregateUserActivityAsync(request, headers); portions.Payments = response.Portions.ToArray(); })); parallelTasks.Add(Task.Run(async() => { var request = new LoansReadMicroservice.AggregateUserActivityRequest { AccountsIds = { accountsIds }, TimestampFrom = from, TimestampTo = to, Granularity = granularity }; var response = await loansClient.AggregateUserActivityAsync(request, headers); portions.Loans = response.Portions.ToArray(); })); parallelTasks.Add(Task.Run(async() => { var request = new CardsReadMicroservice.AggregateUserActivityRequest { AccountsIds = { accountsIds }, TimestampFrom = from, TimestampTo = to, Granularity = granularity }; var response = await cardsClient.AggregateUserActivityAsync(request, headers); portions.Cards = response.Portions.ToArray(); })); await Task.WhenAll(parallelTasks); return(portions); }
public static string SerializerUserActivityReport(string userId, DateTime?from, DateTime?to, ReportGranularity granularity, ReportPortions portions) { var sb = new StringBuilder(); sb.AppendLine($"Raport aktywności użytkownika; {userId}"); sb.AppendLine($"Zakres od; {from?.ToString() ?? "-"}"); sb.AppendLine($"Zakres do; {to?.ToString() ?? "-"}"); sb.AppendLine($"Granularność; {granularity}"); sb.WriteAccountsData(portions.Accounts); sb.WriteCardsData(portions.Cards); sb.WritePaymentsData(portions.Payments); sb.WriteLoansData(portions.Loans); return(sb.ToString()); }