public async Task <HousingBudget> Run(string clientId) { var availableBudgetTask = budgetEvaluator.CalculateAvailableMonthlyBudget(clientId); var loanPreferencesTask = loanPreferencesRepository.Get(clientId); var listingsTask = savedListingsRepository.Get(clientId); var availableBudget = await availableBudgetTask; var loanPreferences = await loanPreferencesTask; var listings = await listingsTask; var percentageForDownPayment = loanPreferences.PercentageForDownPayment; var termInMonths = loanPreferences.TermInMonths; var rate = loanPreferences.Rate; var evaluatedListingsTasks = listings .Listings .Select(listing => Task.Run(() => listingsEvaluator.Evaluate(availableBudget, percentageForDownPayment, termInMonths, rate, listing))) .ToList(); var evaluatedListings = await Task.WhenAll(evaluatedListingsTasks); var housingBudget = new HousingBudget(); housingBudget.AvailableMonthlyBudgetForMortgage = Decimal.Round(availableBudget, 2); housingBudget.LoanTermInMonths = termInMonths; housingBudget.LoanRate = rate; housingBudget.EvaluatedListings = evaluatedListings.ToList(); return(housingBudget); }
public async Task <ActionResult <LoanPreferences> > Get(string clientId) { return(await loanPreferencesRepository.Get(clientId)); }