示例#1
0
        public override async Task <AggregateUserActivityResponse> AggregateUserActivity(AggregateUserActivityRequest request, ServerCallContext context)
        {
            var headers  = context.RequestHeaders.SelectCustom();
            var accounts = await dataFetcher.GetAccounts(headers, request.UserId);

            var accountsIds = accounts.Select(a => a.Id).ToArray();
            var data        = new UserActivityRaportData
            {
                From        = request.TimestampFrom.ToDateTime(),
                To          = request.TimestampTo.ToDateTime(),
                Granularity = request.Granularity,
                Accounts    = accounts,
                UserId      = request.UserId
            };

            var parallelTasks = new List <Task>();

            parallelTasks.Add(Task.Run(async() => data.Transactions = await dataFetcher.GetAccountsTransactions(headers, accountsIds, request.TimestampFrom, request.TimestampTo)));
            parallelTasks.Add(Task.Run(async() =>
            {
                var paymentsAndLoans = await dataFetcher.GetPaymentsWithLoans(headers, accountsIds);
                data.Payments        = paymentsAndLoans.Payments;
                data.Loans           = paymentsAndLoans.Loans;
            }));
            parallelTasks.Add(Task.Run(async() => data.Cards = await dataFetcher.GetCards(headers, accountsIds)));
            await Task.WhenAll(parallelTasks);

            var report = ReportGenerator.AggregateUserActivity(data);

            return(new AggregateUserActivityResponse {
                Report = report
            });
        }
示例#2
0
        public static string AggregateUserActivity(UserActivityRaportData data)
        {
            var withTimestamps = data.Transactions.Select(t => new TransactionWithTimestamp {
                Timestamp = t.Timestamp.ToDateTime(), Transaction = t
            });

            var accountsPortion = data.Accounts.SelectMany(a => AggregateUserAccountsTransactions(a, withTimestamps, data.Granularity)).ToArray();

            var cardsTransactions = withTimestamps.Where(t => t.Transaction.CardId != null);
            var cardsPortion      = data.Cards.SelectMany(c => AggregateUserCardTransactions(c, cardsTransactions, data.Granularity)).ToArray();

            var paymentsTransactions = withTimestamps.Where(t => t.Transaction.PaymentId != null);
            var paymentsPortion      = data.Payments.SelectMany(p => AggregateUserPaymentsTransactions(p, paymentsTransactions, data.Granularity)).ToArray();
            var loansPortion         = data.Loans.SelectMany(l => AggregateUserLoansTransactions(l, paymentsTransactions, data.Granularity)).ToArray();

            return(ReportCsvSerializer.SerializerUserActivityReport(data, accountsPortion, cardsPortion, paymentsPortion, loansPortion));
        }
示例#3
0
        public static string SerializerUserActivityReport(UserActivityRaportData data,
                                                          UserReportPortion[] accountsPortions,
                                                          UserReportPortion[] cardsPortions,
                                                          UserReportPortion[] paymentsPortions,
                                                          UserReportPortion[] loansPortions)
        {
            var sb = new StringBuilder();

            sb.AppendLine($"Raport aktywności użytkownika; {data.UserId}");
            sb.AppendLine($"Zakres od; {data.From?.ToString() ?? "-"}");
            sb.AppendLine($"Zakres do; {data.To?.ToString() ?? "-"}");
            sb.AppendLine($"Granularność; {data.Granularity}");

            sb.WriteAccountsData(accountsPortions.ToArray());
            sb.WriteCardsData(cardsPortions.ToArray());
            sb.WritePaymentsData(paymentsPortions.ToArray());
            sb.WriteLoansData(loansPortions.ToArray());

            return(sb.ToString());
        }