public async Task <List <NewsDto> > Handle(GetTopNNotRatedNewsQuery request, CancellationToken cancellationToken) { var news = await _dbContext.News.AsNoTracking() .Where(n => n.Rating == null) .OrderBy(n => n.NewsDate) .Select(n => _mapper.Map <NewsDto>(n)) .Take(request.Count) .ToListAsync(); return(news); }
public async Task RateNews() { var topNNotratedNewsQuery = new GetTopNNotRatedNewsQuery() { Count = 30 }; var topNotRatedNews = await _mediator.Send(topNNotratedNewsQuery); var affinList = Text.ReadAfinn(_configuration["AfinnPath"]); foreach (var news in topNotRatedNews) { if (!string.IsNullOrEmpty(news.Body)) { var clearBodyText = HtmlCleanup.RemoveHtmlTags(news.Body); var lemmaList = (await Ispras.GetTexterra( Text.PrepareForIspras(clearBodyText))) .Where(l => !string.IsNullOrEmpty(l)); var lemmaWithRate = lemmaList.Select(l => new { Lemma = l, Rate = affinList.Where(aff => aff.Key == l) .FirstOrDefault().Value }); var rate = lemmaWithRate.Where(r => r.Rate != null) .Average(r => r.Rate); if (rate == null) { rate = 0; Log.Debug($"News with id {news.Id} rate is null !!!"); } var setNewsRateCommand = new SetNewsRateCommand() { Id = news.Id, Rating = (float)rate.Value }; var updatedCount = await _mediator.Send(setNewsRateCommand); Log.Information($"Set rate for {topNotRatedNews.Count()} news"); } else { Log.Error($"News with id {news.Id} has empty body"); } } }