public async Task <Card[]> GetCards(Metadata headers, string[] accountsIds) { var request = new GetCardsRequest { Ids = { accountsIds } }; var response = await cardsClient.GetByAccountsAsync(request, headers); return(response.Cards.ToArray()); }
public override async Task <GetPanelResponse> Get(GetPanelRequest request, ServerCallContext context) { RepeatedField <Loan> loans = new RepeatedField <Loan>(); RepeatedField <Payment> payments = new RepeatedField <Payment>(); RepeatedField <Account> accounts = new RepeatedField <Account>(); RepeatedField <Card> cards = new RepeatedField <Card>(); RepeatedField <Transaction> transactions = new RepeatedField <Transaction>(); var accountsResponse = await accountsClient.GetUserAccountsAsync(new GetUserAccountsRequest { UserId = request.UserId }, context.RequestHeaders.SelectCustom()); var accountsIds = accountsResponse.Accounts.Select(a => a.Id).ToArray(); accounts = accountsResponse.Accounts; if (accounts.Any()) { var parallelTasks = new List <Task>(); parallelTasks.Add(Task.Run(async() => { var transactionsResponse = await transactionsClient.FilterAsync( new FilterTransactionsRequest { Senders = { accountsIds }, Top = PanelTransactionsCount } , context.RequestHeaders.SelectCustom()); })); parallelTasks.Add(Task.Run(async() => { var paymentsAndLoans = await paymentsClient.GetByAccountsAsync(new GetPaymentsRequest { Ids = { accountsIds } }, context.RequestHeaders.SelectCustom()); loans = paymentsAndLoans.Loans; payments = paymentsAndLoans.Payments; })); parallelTasks.Add(Task.Run(async() => { var cardsResponse = await cardsClient.GetByAccountsAsync(new GetCardsRequest { Ids = { accountsIds } }, context.RequestHeaders.SelectCustom()); cards = cardsResponse.Cards; })); await Task.WhenAll(parallelTasks); } return(new GetPanelResponse { Cards = { cards }, Payments = { payments }, Accounts = { accounts }, Loans = { loans }, Transactions = { transactions.OrderByDescending(t => t.Timestamp) } }); }