Example #1
0
        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);
            }
        }