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 } }); }
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 }); }