public async Task <ActionResult <HeadlinesResponse> > SearchHeadlines( [FromQuery(Name = "term")] string term, [FromHeader(Name = "annotation-session")] string sessionToken, [FromQuery(Name = "sentiment")] HeadlineSentiment sentiment = HeadlineSentiment.POSITIVE, [FromQuery(Name = "page")] int page = 1, [FromQuery(Name = "limit")] int limit = 10) { if (page <= 0) { return(BadRequest("Page must be greater than 0")); } var offset = (page - 1) * limit; var headlines = await _headlineRepository.SearchHeadlines(sentiment, term, limit, offset); var count = await _headlineRepository.SearchHeadlinesCount(sentiment, term); foreach (var headline in headlines) { headline.Annotations = FilterHeadlineAnnotations(headline, sessionToken); } return(new HeadlinesResponse { Headlines = (System.Collections.Generic.IList <Models.DBModels.INewsHeadline>)headlines, Count = count }); }
public async Task <int> SearchHeadlinesCount(HeadlineSentiment sentiment, string term) { var isPositive = sentiment == HeadlineSentiment.POSITIVE; var predictedClass = isPositive ? 1 : 0; var count = await _headlines .Find( h => h.PredictedClass == predictedClass && h.Headline.ToLower().Contains(term.ToLower()) ).CountDocumentsAsync(); return((int)count); }
public async Task <int> FetchHeadlinesBySentimentCount(HeadlineSentiment sentiment, int dateOffset) { var predictedClass = sentiment == HeadlineSentiment.POSITIVE ? 1 : 0; var targetDate = DateTime.Now.AddDays(-1 * dateOffset).Date; var endDate = targetDate.AddDays(1).Date; var count = await _headlines .Find( h => h.PublishedAt >= targetDate && h.PublishedAt < endDate && h.PredictedClass == predictedClass ).CountDocumentsAsync(); return((int)count); }
public async Task <IList <INewsHeadline> > SearchHeadlines( HeadlineSentiment sentiment, string term, int limit = 10, int offset = 0) { var isPositive = sentiment == HeadlineSentiment.POSITIVE; var predictedClass = isPositive ? 1 : 0; var filter = _headlines .Find( h => h.PredictedClass == predictedClass && h.Headline.ToLower().Contains(term.ToLower()) ).Limit(limit).Skip(offset); var headlines = isPositive ? await filter.SortByDescending(h => h.SemanticValue).ToListAsync() : await filter.SortBy(h => h.SemanticValue).ToListAsync(); return(headlines.Cast <INewsHeadline>().ToList()); }
public async Task <ActionResult <HeadlinesResponse> > GetHeadlinesByDay( [FromQuery(Name = "sentiment")] HeadlineSentiment sentiment, [FromQuery(Name = "limit")] int limit, [FromQuery(Name = "page")] int page, [FromQuery(Name = "date")] DateTime dateTime, [FromHeader(Name = "annotation-session")] string sessionToken) { if (page <= 0) { return(BadRequest("Page must be greater than 0")); } var today = DateTime.Now; if (dateTime == new DateTime()) { dateTime = today; } if (dateTime > today) { return(BadRequest("Date cannot be in the future")); } var dateOffset = (today - dateTime).TotalDays; var offset = (page - 1) * limit; var headlines = await _headlineRepository.FetchHeadlinesBySentiment(sentiment, (int)dateOffset, limit, offset); var count = await _headlineRepository.FetchHeadlinesBySentimentCount(sentiment, (int)dateOffset); foreach (var headline in headlines) { headline.Annotations = FilterHeadlineAnnotations(headline, sessionToken); } return(new HeadlinesResponse { Headlines = headlines, Count = count }); }
public async Task <IList <INewsHeadline> > FetchHeadlinesBySentiment( HeadlineSentiment sentiment, int dateOffset, int limit = 10, int offset = 0) { var isPositive = sentiment == HeadlineSentiment.POSITIVE; var predictedClass = isPositive ? 1 : 0; var targetDate = DateTime.Now.AddDays(-1 * dateOffset).Date; var endDate = targetDate.AddDays(1).Date; var filter = _headlines .Find( h => h.PublishedAt >= targetDate && h.PublishedAt < endDate && h.PredictedClass == predictedClass ).Limit(limit).Skip(offset); var headlines = isPositive ? await filter.SortByDescending(h => h.SemanticValue).ToListAsync() : await filter.SortBy(h => h.SemanticValue).ToListAsync(); return(headlines.Cast <INewsHeadline>().ToList()); }