public async Task <CompositionAndRecommendation> GetCompositionAndRecommendation(ulong userId) { var compositionAndRecommendation = new CompositionAndRecommendation(); var holdings = await _holdingsService.GetAllHoldingsForUserWithStockDetails(userId); var tickers = holdings.Select(x => x.Stock.Ticker).Distinct(); var recommendationTask = _stockRecommendationService.GetAnalysisAndRecommendation(tickers); var portfolioTask = _portfolioCompositionService.GetPortfolioComposition(userId); var portfolio = await portfolioTask; var recommendation = await recommendationTask; MapCompositionAndRecommendation(compositionAndRecommendation, portfolio, recommendation); return(compositionAndRecommendation); }
private void MapCompositionAndRecommendation(CompositionAndRecommendation compositionAndRecommendation, PortfolioComposition portfolioComposition, IEnumerable <ScraperAnalysis> scraperAnalyses) { var analysesMap = MapAnalyses(scraperAnalyses); compositionAndRecommendation.TotalCost = portfolioComposition.TotalCost; compositionAndRecommendation.TotalInvestmentValue = portfolioComposition.TotalInvestmentValue; var compositionAndRecommendationMap = new Dictionary <string, Tuple <IndividualStockWeightage, ScraperAnalysis> >(); foreach (var stockWeightage in portfolioComposition.IndividualStockWeightages) { if (!compositionAndRecommendationMap.ContainsKey(stockWeightage.Ticker) && analysesMap.ContainsKey(stockWeightage.Ticker)) { var portfolioAndRecommendation = new Tuple <IndividualStockWeightage, ScraperAnalysis>(stockWeightage, analysesMap[stockWeightage.Ticker]); compositionAndRecommendationMap[stockWeightage.Ticker] = portfolioAndRecommendation; } } compositionAndRecommendation.Analyses = compositionAndRecommendationMap; }