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);
        }
示例#2
0
        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());
        }