Example #1
0
        public Task Get(MessageContext context, GetLoansEvent inputEvent)
        {
            var loans = inputEvent.Ids.Select(id => loansRepository.Get(id))
                        .Where(loan => loan != null).ToArray();

            publishingRouter.Publish(context.ReplyTo, new SelectedLoansEvent {
                Loans = loans
            }, context.FlowId);
            return(Task.CompletedTask);
        }
        public Task Get(MessageContext context, GetPaymentsEvent inputEvent)
        {
            var payments = inputEvent.Ids.Select(id => paymentsRepository.Get(id))
                           .Where(payment => payment != null)
                           .ToArray();

            publishingRouter.Publish(context.ReplyTo, new SelectedPaymentsEvent {
                Payments = payments
            }, context.FlowId);
            return(Task.CompletedTask);
        }
Example #3
0
        public Task Get(MessageContext context, GetCardsEvent inputEvent)
        {
            var cards = inputEvent.Ids.Select(id => cardsRepository.GetCard(id))
                        .Where(card => card != null)
                        .ToArray();

            publishingRouter.Publish(context.ReplyTo, new SelectedCardsEvent {
                Cards = cards
            }, context.FlowId);
            return(Task.CompletedTask);
        }
Example #4
0
        public async Task <BatchData> Get([FromQuery(Name = "part")] int part, [FromQuery(Name = "total")] int total, [FromQuery(Name = "timestamp")] DateTime timestamp)
        {
            var flowId = HttpContext.Items["flowId"].ToString();

            Payment[]        payments = null;
            Loan[]           loans    = null;
            AccountBalance[] balances = null;

            var paymentsFlowId = flowId + "_p";
            var paymentsEvent  = new GetPartPaymentsEvent {
                Part = part, TotalParts = total, Timestamp = timestamp
            };
            var paymentsResponse = await eventsAwaiter.AwaitResponse <SelectedPaymentsEvent>(paymentsFlowId, () => publishingRouter.Publish(Queues.Payments, paymentsEvent, paymentsFlowId, Queues.APIGateway));

            payments = paymentsResponse.Payments;

            var parallelTasks = new List <Task>();

            parallelTasks.Add(Task.Run(async() =>
            {
                var loansFlowId = flowId + "_l";
                var paymentsIds = payments.Select(p => p.Id).ToArray();
                var loansEvent  = new GetLoansByPaymentsEvent {
                    PaymentsIds = paymentsIds
                };
                var loansResponse = await eventsAwaiter.AwaitResponse <SelectedLoansEvent>(loansFlowId, () => publishingRouter.Publish(Queues.Loans, loansEvent, loansFlowId, Queues.APIGateway));
                loans             = loansResponse.Loans;
            }));
            parallelTasks.Add(Task.Run(async() =>
            {
                var balancesFlowId = flowId + "_b";
                var accountsIds    = payments.Select(p => p.AccountId).Distinct().ToArray();
                var balancesEvent  = new GetBalancesEvent {
                    Ids = accountsIds
                };
                var balancesRequest = await eventsAwaiter.AwaitResponse <SelectedBalancesEvent>(balancesFlowId, () => publishingRouter.Publish(Queues.Accounts, balancesEvent, balancesFlowId, Queues.APIGateway));
                balances            = balancesRequest.Balances;
            }));

            await Task.WhenAll(parallelTasks);

            return(new BatchData
            {
                Balances = balances.Select(b => mapper.Map <BalanceDTO>(b)).ToArray(),
                Loans = loans.Select(l => mapper.Map <LoanDTO>(l)).ToArray(),
                Payments = payments.Select(p => mapper.Map <PaymentDTO>(p)).ToArray()
            });
        }
        public Task Token(MessageContext context, CreateTokenEvent inputEvent)
        {
            var token = usersRepository.CreateSession(inputEvent.Login, inputEvent.Password);

            publishingRouter.Publish(context.ReplyTo, new NewTokenEvent {
                Token = token
            }, context.FlowId);
            return(Task.CompletedTask);
        }
        public Task Transfer(Transfer transfer)
        {
            var transferEvent = new TransferEvent {
                Transfer = transfer
            };
            var flowId = HttpContext.Items["flowId"].ToString();

            publishingRouter.Publish(Queues.Cards, transferEvent, flowId);
            return(Task.CompletedTask);
        }
        public async Task <IEnumerable <AccountDTO> > Get(string userId)
        {
            var flowId  = HttpContext.Items["flowId"].ToString();
            var payload = new GetUserAccountsEvent {
                UserId = userId
            };
            var response = await eventsAwaiter.AwaitResponse <SelectedAccountsEvent>(flowId, () => publishingRouter.Publish(Queues.Accounts, payload, flowId, Queues.APIGateway));

            var accounts = response.Accounts.Select(a => mapper.Map <AccountDTO>(a));

            return(accounts);
        }
        public async Task <Account[]> GetAccounts(string flowId, string userId)
        {
            var payload = new GetUserAccountsEvent {
                UserId = userId
            };
            var response = await eventsAwaiter.AwaitResponse <SelectedAccountsEvent>(flowId, () => publishingRouter.Publish(Queues.Accounts, payload, flowId, Queues.Transactions));

            return(response.Accounts);
        }
        public async Task <string> UserActivity(UserActivityReportRequest data)
        {
            var payload = new AggregateUserActivityReportDataEvent
            {
                Granularity   = data.Granularity,
                TimestampFrom = data.TimestampFrom,
                TimestampTo   = data.TimestampTo,
                UserId        = data.UserId,
            };
            var flowId   = HttpContext.Items["flowId"].ToString();
            var response = await eventsAwaiter.AwaitResponse <AggregatedUserActivityReportEvent>(flowId, () => publishingRouter.Publish(Queues.Transactions, payload, flowId, Queues.APIGateway));

            return(ReportCsvSerializer.SerializerUserActivityReport(data.UserId, data.TimestampFrom, data.TimestampTo, data.Granularity, response));
        }
        public async Task <Panel> Panel(string userId)
        {
            var mainFlowId = HttpContext.Items["flowId"].ToString();

            var panel = new Panel {
                Accounts = new AccountDTO[0], Cards = new CardDTO[0], Payments = new PaymentDTO[0], Transactions = new TransactionDTO[0], Loans = new LoanDTO[0]
            };

            var accountsFlowId = mainFlowId + "_a";
            var accountsEvent  = new GetUserAccountsEvent {
                UserId = userId
            };
            var accountsResponse = await eventsAwaiter.AwaitResponse <SelectedAccountsEvent>(accountsFlowId, () => publishingRouter.Publish(Queues.Accounts, accountsEvent, accountsFlowId, Queues.APIGateway));

            panel.Accounts = mapper.Map <AccountDTO[]>(accountsResponse.Accounts);
            var accountsIds = accountsResponse.Accounts.Select(a => a.Id).ToArray();

            if (accountsIds.Any())
            {
                var parallelTasks = new List <Task>();
                parallelTasks.Add(Task.Run(async() =>
                {
                    var transactionsFlowId = mainFlowId + "_t";
                    var transactionsEvent  = new FilterTransactionsEvent {
                        Senders = accountsIds, Top = PanelTransactionsCount
                    };
                    var transactionsResponse = await eventsAwaiter.AwaitResponse <SelectedTransactionsEvent>(transactionsFlowId, () => publishingRouter.Publish(Queues.Transactions, transactionsEvent, transactionsFlowId, Queues.APIGateway));
                    panel.Transactions       = mapper.Map <TransactionDTO[]>(transactionsResponse.Transactions);
                }));

                parallelTasks.Add(Task.Run(async() =>
                {
                    var paymentsFlowId = mainFlowId + "_p";
                    var paymentsEvent  = new GetPaymentsByAccountsEvent {
                        AccountsIds = accountsIds
                    };
                    var paymentsResponse = await eventsAwaiter.AwaitResponse <SelectedPaymentsEvent>(paymentsFlowId, () => publishingRouter.Publish(Queues.Payments, paymentsEvent, paymentsFlowId, Queues.APIGateway));
                    panel.Payments       = mapper.Map <PaymentDTO[]>(paymentsResponse.Payments);

                    var loansFlowId = mainFlowId + "_l";
                    var paymentsIds = paymentsResponse.Payments.Select(p => p.Id).ToArray();
                    var loansEvent  = new GetLoansByPaymentsEvent {
                        PaymentsIds = paymentsIds
                    };
                    var loansResponse = await eventsAwaiter.AwaitResponse <SelectedLoansEvent>(loansFlowId, () => publishingRouter.Publish(Queues.Loans, loansEvent, loansFlowId, Queues.APIGateway));
                    panel.Loans       = mapper.Map <LoanDTO[]>(loansResponse.Loans);
                }));

                parallelTasks.Add(Task.Run(async() =>
                {
                    var cardsFlowId = mainFlowId + "_c";
                    var cardsEvent  = new GetCardsByAccountsEvent {
                        AccountsIds = accountsIds
                    };
                    var cardsResponse = await eventsAwaiter.AwaitResponse <SelectedCardsEvent>(cardsFlowId, () => publishingRouter.Publish(Queues.Cards, cardsEvent, cardsFlowId, Queues.APIGateway));
                    panel.Cards       = mapper.Map <CardDTO[]>(cardsResponse.Cards);
                }));

                await Task.WhenAll(parallelTasks);
            }

            return(panel);
        }