public IActionResult Tweets(TweetQueryInputModel inputQuery) { if (ModelState.IsValid) { TweetQueryModel query = new TweetQueryModel(); query.QueryType = inputQuery.QueryType; query.OriginalQuery = inputQuery.OriginalQuery; query.Page = inputQuery.Page; query.FilterOptions = new FilterOptions { Officials = inputQuery.Officials, States = inputQuery.States, Parties = inputQuery.Parties }; DisplayTweetsViewModel model = _tweetResults.GetTweetResults(query); if (model == null) { return(View("TweetsNotFound")); } return(View(model)); } else { // To do: Display validation errors return(View("TweetsNotFound")); } }
public DisplayTweetsViewModel GetTweetResults(TweetQueryModel query) { List <Tweet> tweets = new List <Tweet>(); if (query.QueryType.ToLower() == "search") { tweets = _tweetData.FindBySearch(query.OriginalQuery); } else if (query.QueryType.ToLower() == "tag") { List <string> tags = _tagData.GetAllTags(); if (!tags.Contains(query.OriginalQuery)) { return(null); } else { tweets = _tweetData.FindByTag(query.OriginalQuery); } } else { return(null); } if (tweets == null) { return(null); } else { List <TweetsByOfficial> originalResults = _tweetsByOfficial.MatchTweetsToOfficial(tweets); var pageNumber = query.Page ?? 1; var onePageOfTweets = originalResults.SelectMany(x => x.Tweets) .OrderByDescending(tweet => tweet.Created) .ToList() .ToPagedList(pageNumber, 24); TweetFilter filter = new TweetFilter(); List <TweetsByOfficial> results = filter.FilterResults(originalResults, query.FilterOptions); onePageOfTweets = results.SelectMany(x => x.Tweets) .OrderByDescending(tweet => tweet.Created) .ToList() .ToPagedList(pageNumber, 24); var model = new DisplayTweetsViewModel(); model.QueryType = query.QueryType; model.Tweets = onePageOfTweets; model.OriginalQuery = query.OriginalQuery; model.FiltersSelected = query.FilterOptions; model.ResultInfo = new ResultInfo(originalResults); return(model); } }