public async Task <string> UserActivity(UserActivityReportRequest data)
        {
            var request = new AggregateUserActivityRequest
            {
                Granularity   = mapper.Map <Granularity>(data.Granularity),
                TimestampFrom = data.TimestampFrom.ToNullableTimestamp(),
                TimestampTo   = data.TimestampTo.ToNullableTimestamp(),
                UserId        = data.UserId,
            };
            var response = await reportsBranchClient.AggregateUserActivityAsync(request, HttpContext.CreateHeadersWithFlowId());

            return(response.Report);
        }
        public override async Task <AggregateUserActivityResponse> AggregateUserActivity(AggregateUserActivityRequest request, ServerCallContext context)
        {
            var accounts = accountsRepository.GetByUser(request.UserId);

            if (!accounts.Any())
            {
                return(new AggregateUserActivityResponse());
            }

            var accountsIds          = accounts.Select(a => a.Id);
            var transactionsResponse = await transactionsClient.FilterAsync(new FilterTransactionsRequest
            {
                Senders       = { accountsIds },
                Recipients    = { accountsIds },
                TimestampFrom = request.TimestampFrom,
                TimestampTo   = request.TimestampTo
            }, context.RequestHeaders.SelectCustom());

            var transactions = transactionsResponse.Transactions.ToArray();
            var aggregated   = accounts.SelectMany(a => AggregateUserTransactions(a, transactions, request.Granularity));

            return(new AggregateUserActivityResponse {
                Portions = { aggregated }
            });
        }
        public override async Task <AggregateUserActivityResponse> AggregateUserActivity(AggregateUserActivityRequest request, ServerCallContext context)
        {
            var cards = cardsRepository.GetByAccounts(request.AccountsIds);

            if (!cards.Any())
            {
                return(new AggregateUserActivityResponse());
            }

            var cardsIds             = cards.Select(p => p.Id).ToArray();
            var transactionsResponse = await transactionsReadClient.FilterAsync(new FilterTransactionsRequest { Cards = { cardsIds }, TimestampFrom = request.TimestampFrom, TimestampTo = request.TimestampTo });

            var transactions = transactionsResponse.Transactions.ToArray();
            var aggregated   = cards.SelectMany(c => AggregateUserTransactions(c, transactions, request.Granularity));

            return(new AggregateUserActivityResponse {
                Portions = { aggregated }
            });
        }
        public override async Task <AggregateUserActivityResponse> AggregateUserActivity(AggregateUserActivityRequest request, ServerCallContext context)
        {
            var loans = loansRepository.GetByAccounts(request.AccountsIds);

            if (!loans.Any())
            {
                return(new AggregateUserActivityResponse());
            }
            var paymentsIds          = loans.Select(l => l.PaymentId).ToArray();
            var transactionsResponse = await transactionsReadClient.FilterAsync(new FilterTransactionsRequest { Payments = { paymentsIds }, TimestampFrom = request.TimestampFrom, TimestampTo = request.TimestampTo }, context.RequestHeaders.SelectCustom());

            var transactions = transactionsResponse.Transactions.ToArray();
            var aggregated   = loans.SelectMany(l => AggregateUserTransactions(l, transactions, request.Granularity));

            return(new AggregateUserActivityResponse {
                Portions = { aggregated }
            });
        }
Ejemplo n.º 5
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
            });
        }