Пример #1
0
        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);
        }
Пример #2
0
        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;
        }