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); }
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; } }