// GET: Profile public ActionResult Index() { object profileId = Request.RequestContext.RouteData.Values["id"]; string currentUserId = User.Identity.GetUserId(); if (string.IsNullOrWhiteSpace((string)profileId)) { profileId = currentUserId; } // Add user to visitor list for the visited profile, but remove them first if they're already in the 5 latest if (!string.Equals(currentUserId, (string)profileId)) { List <VisitorModels> allVisitors = visitorRepository.GetAllVisitorsByUserId((string)profileId); // Everyone who has looked at this profile if (allVisitors.Any((v) => v.VisitFromId.Equals(currentUserId))) // If current user has already visited this profile { visitorRepository.Remove(visitorRepository.GetVisitIdByVisitFromUserId((string)profileId, currentUserId)); // Remove the visit by the current user } VisitorModels visitor = new VisitorModels { VisitDateTime = DateTime.Now, VisitFromId = currentUserId, VisitToId = (string)profileId }; visitorRepository.Add(visitor); visitorRepository.Save(); } ProfileModels userProfile = profileRepository.Get((string)profileId); List <PostModels> posts = postRepository.GetAllPostsForUserById((string)profileId); List <FriendModels> friends = friendRepository.GetAllFriendsByUserId((string)profileId); PostViewModelsForUsers postViewModelForUsers = ConvertPostToPostViewModelForUsers(posts, (string)profileId); FriendViewModelsForUsers friendViewModelsForUsers = ConvertFriendToFriendViewModelsForUsers(friends, (string)profileId); ProfileViewModel userProfileViewModel = new ProfileViewModel { Id = userProfile.Id, FirstName = userProfile.FirstName, LastName = userProfile.LastName, Gender = userProfile.Gender, Biography = userProfile.Biography, BirthDate = userProfile.BirthDate.ToShortDateString(), IsActive = userProfile.IsActive, Posts = postViewModelForUsers, Friends = friendViewModelsForUsers, ProfileImage = userProfile.ProfileImage }; ViewBag.ProfileRelation = GetProfileRelation((string)profileId); return(View(userProfileViewModel)); }
//Other profiles public ActionResult UserProfile(string id) { if (id == User.Identity.GetUserId()) { return(RedirectToAction("Index")); } var user = userRepository.Get(id); var posts = postRepository.GetAllPostForUserIncludeSenderOrderByDateDesc(id); var identity = userRepository.Get(User.Identity.GetUserId()); var model = new UserProfileViewModel { UserId = user.Id, Firstname = user.Firstname, Lastname = user.Lastname, Description = user.Description, Image = user.ProfileImage, IsAlreadyFriend = friendRepository.IsAlreadyFriend(id, User.Identity.GetUserId()), MatchingPercentage = Math.Round(MatchAlgorithm.MatchAlgorithm.GetMatchPercentage(identity, user), 1) }; if (model.IsAlreadyFriend) { var friend = friendRepository.GetAll().First(x => x.TheFriendId == user.Id && x.TheUserId == User.Identity.GetUserId()); model.RelationStatusId = friend.Id; model.RelationStatusToIdentity = RelationStatusToIdentity.IsFriend; } else { model.HasSendRequest = requestRepository.HasAlreadySentRequest(id, User.Identity.GetUserId()); if (model.HasSendRequest) { var request = requestRepository.GetAll().First(x => x.RequestedBy_Id == User.Identity.GetUserId() && x.RequestedTo_Id == model.UserId); model.RelationStatusId = request.Id; model.RelationStatusToIdentity = RelationStatusToIdentity.HasSendRequest; } else { model.HasRecievedRequest = requestRepository.HasRecievedRequest(id, User.Identity.GetUserId()); if (model.HasRecievedRequest) { var request = requestRepository.GetAll().First(x => x.RequestedTo_Id == User.Identity.GetUserId() && x.RequestedBy_Id == model.UserId); model.RelationStatusId = request.Id; model.RelationStatusToIdentity = RelationStatusToIdentity.HasRecievedRequest; } else { model.RelationStatusToIdentity = RelationStatusToIdentity.IsNotFriend; } } } model.Posts = ConvertPostToPostViewModelIdentity(posts, id); model.Posts.IsFriendOrNot = model.IsAlreadyFriend; var visitor = new Visitor() { VisitBy = userRepository.Get(User.Identity.GetUserId()), VisitTo = user, VisitDate = DateTime.Now }; visitorRepository.Add(visitor); visitorRepository.Save(); return(View(model)); }