예제 #1
0
        public async Task <CompanyRaiting> GetCompanyRaitingAsync(CompanyProfile company)
        {
            CompanyRaitingFinMod raitingFinMod = await _financialModelingPrepService.GetCompanyRaitingAsync(company.Symbol);

            CompanyRaiting companyRaiting = new CompanyRaiting
            {
                Date   = raitingFinMod.Date,
                Symbol = raitingFinMod.Symbol,
                Rating = _unitOfWork.Repository <Rating>().Find(rating => rating.Name == raitingFinMod.Rating).SingleOrDefault() ?? new Rating {
                    Name = raitingFinMod.Rating
                },
                RatingRecommendation           = GetRatingRecommendation(raitingFinMod.RatingRecommendation),
                RatingScore                    = raitingFinMod.RatingScore,
                RatingDetailsDCFRecommendation = GetRatingRecommendation(raitingFinMod.RatingDetailsDCFRecommendation),
                RatingDetailsDCFScore          = raitingFinMod.RatingDetailsDCFScore,
                RatingDetailsDERecommendation  = GetRatingRecommendation(raitingFinMod.RatingDetailsDERecommendation),
                RatingDetailsDEScore           = raitingFinMod.RatingDetailsDEScore,
                RatingDetailsPBRecommendation  = GetRatingRecommendation(raitingFinMod.RatingDetailsPBRecommendation),
                RatingDetailsPBScore           = raitingFinMod.RatingDetailsPBScore,
                RatingDetailsPERecommendation  = GetRatingRecommendation(raitingFinMod.RatingDetailsPERecommendation),
                RatingDetailsPEScore           = raitingFinMod.RatingDetailsPEScore,
                RatingDetailsROARecommendation = GetRatingRecommendation(raitingFinMod.RatingDetailsROARecommendation),
                RatingDetailsROAScore          = raitingFinMod.RatingDetailsROAScore,
                RatingDetailsROERecommendation = GetRatingRecommendation(raitingFinMod.RatingDetailsROERecommendation),
                RatingDetailsROEScore          = raitingFinMod.RatingDetailsROEScore
            };

            return(companyRaiting);
        }
예제 #2
0
        public async Task <CompanyProfile> GetCompanyProfileAsync(string symbol)
        {
            //по возможности возвращаем сохраненный профиль
            CompanyProfile companyProfile = _unitOfWork.Repository <CompanyProfile>().Find(profile => profile.Symbol == symbol).SingleOrDefault();

            if (companyProfile != null)
            {
                return(companyProfile);
            }

            //если символов нет в сервисе
            if (_unitOfWork.Repository <FinancialModelingServiceInvalidSymbols>().Find(x => x.InvalidSymbols == symbol).Any())
            {
                throw new NotImplementedException();
            }

            //загружаем профиль из сервиса
            try
            {
                CompanyProfileFinMod companyProfileFinMod = await _financialModelingPrepService.GetCompanyProfileAsync(symbol);

                companyProfile = companyProfileFinMod.ToCompanyProfile(_unitOfWork);
                _unitOfWork.Repository <CompanyProfile>().Add(companyProfile);

                //финансовые показатели
                try
                {
                    companyProfile.FinancialRatios = await GetFinancialRatiosAsync(companyProfile);
                }
                catch
                {
                    // ignored
                }

                //рейтинг компании
                try
                {
                    CompanyRaiting companyRaiting = await GetCompanyRaitingAsync(companyProfile);

                    _unitOfWork.Repository <CompanyRaiting>().Add(companyRaiting);
                    companyProfile.CompanyRaitings = new List <CompanyRaiting> {
                        companyRaiting
                    };
                }
                catch
                {
                    // ignored
                }

                _unitOfWork.SaveChanges();
                return(companyProfile);
            }
            catch (InvalidSymbolException)
            {
                //добавляем тикер в список отсутствующих в сервисе тикеров
                _unitOfWork.Repository <FinancialModelingServiceInvalidSymbols>().Add(new FinancialModelingServiceInvalidSymbols {
                    InvalidSymbols = symbol
                });
                _unitOfWork.SaveChanges();
                throw;
            }
        }