public async Task <IActionResult> Index() { if (!HttpContext.User.Identity.IsAuthenticated) { return(View("Explore")); } else { string userId = User.FindFirstValue(ClaimTypes.NameIdentifier); // will give the user's userId ApplicationUser user = await _userManager.Users.Include(u => u.TweetLikes).Include(u => u.Followers).ThenInclude(f => f.Follower).Include(u => u.Following).ThenInclude(f => f.User).SingleAsync(u => u.Id == userId); //var usersToFollow = _context.UserFollows.Where(f => f.FollowerId != userId).ToList(); IQueryable <ApplicationUser> usersToFollow = _userManager.Users.Include(u => u.Followers).Where(u => u.Id != user.Id); IndexViewModel viewModel = new IndexViewModel(); viewModel.CurrentUser = user; ICollection <Tweet> tweetsOrdered = new Collection <Tweet>(); IEnumerable <Tweet> tweets = _tweetRepository.GetUserTweets(user.Id); List <string> followedUsers = new List <string>(); foreach (var item in user.Following) { followedUsers.Add(item.UserId); } var followedUsersTweets = _tweetRepository.GetFollowedUsersTweets(followedUsers).ToList(); foreach (Tweet item in tweets) { tweetsOrdered.Add(item); } foreach (Tweet item in followedUsersTweets) { tweetsOrdered.Add(item); } foreach (var userToFollow in usersToFollow) { if (userToFollow.Followers.Count != 0) { var followedAlready = userToFollow.Followers.Where(f => f.FollowerId == userId).ToList().Count; if (followedAlready == 0) { viewModel.UsersToFollow.Add(userToFollow); } } if (userToFollow.Followers.Count == 0) { viewModel.UsersToFollow.Add(userToFollow); } } //_tweetRepository.AddLikeToTweet(tweets.First().Id); viewModel.Tweets = tweetsOrdered.OrderByDescending(t => t.CreatedDate).ToList(); return(View("Index", viewModel)); } }