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