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);
        }
示例#2
0
        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");
                }
            }
        }