public ActionResult UserDisplaySolutions(int id, SolutionSortType? sortType, int? page)
        {
            var urlHelper = new UrlHelper(new RequestContext(HttpContext, RouteData), RouteTable.Routes);
            var url = urlHelper.Action("UserDisplaySolutions", "Players", new RouteValueDictionary { { "id", id }, { "sortType", sortType }, { "page", page }},
                             "http", "wikipediamaze.com");

            return new PermanentRedirectResult(url);
        }
        public IPagination<SolutionProfile> GetSolutionsByUserId(int userId, SolutionSortType sortType, int page, int pageSize)
        {
            using (_repository.OpenSession())
            {
                var groupedSolutions = _repository.All<SolutionProfile>().ByUserId(userId).ToList().GroupBy(x => x.PuzzleId);

                var solutions = new List<SolutionProfile>();
                foreach (var ig in groupedSolutions)
                {
                    solutions.Add(ig.OrderByDescending(x => x.PointsAwarded).First());
                }

                switch (sortType)
                {
                    case SolutionSortType.Newest:
                        solutions = solutions.OrderByDescending(x => x.DateCreated).ToList();
                        break;
                    case SolutionSortType.Steps:
                        solutions = solutions.OrderBy(x => x.StepCount).ToList();
                        break;
                    case SolutionSortType.PointsAwarded:
                        solutions = solutions.OrderByDescending(x => x.PointsAwarded).ToList();
                        break;
                }

                return solutions.Skip((page - 1) * pageSize).Take(pageSize).AsCustomPagination(page, pageSize, solutions.Count);
            }
        }
 public UserProfileSolutionListViewModel(IPagination<SolutionProfile> solutions, SolutionSortType sortType, int profileId)
 {
     Solutions = solutions;
     SortType = sortType;
     ProfileId = profileId;
 }
        /// <summary>
        /// Display the solutions on the user profile page.
        /// </summary>
        /// <param name="id">The id of the user who's profile is being displayed</param>
        /// <param name="sortType">The type of sort to apply to the solutions.</param>
        /// <param name="page">The page number to show</param>
        public ActionResult UserDisplaySolutions(int id, SolutionSortType? sortType, int? page)
        {
            sortType = sortType ?? SolutionSortType.Newest;
            page = page ?? 1;
            var pageSize = 30;

            IPagination<SolutionProfile> solutions = _puzzleService.GetSolutionsByUserId(id, sortType.Value, page.Value, pageSize);

            return PartialView(new UserProfileSolutionListViewModel(solutions, sortType.Value, id));
        }