Example #1
0
        private string CreateProblemsResourceUri(HomePageParameters homePageParameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link("GetProblems", new
                {
                    solved = homePageParameters.Solved,
                    userName = homePageParameters.UserHandle,
                    tagName = homePageParameters.TagName,
                    pageNumber = homePageParameters.PageNumber - 1,
                    pageSize = homePageParameters.PageSize
                }));

            case ResourceUriType.NextPage:
                return(Url.Link("GetProblems", new
                {
                    solved = homePageParameters.Solved,
                    userName = homePageParameters.UserHandle,
                    tagName = homePageParameters.TagName,
                    pageNumber = homePageParameters.PageNumber + 1,
                    pageSize = homePageParameters.PageSize
                }));

            default:
                return(Url.Link("GetProblems", new
                {
                    solved = homePageParameters.Solved,
                    userName = homePageParameters.UserHandle,
                    tagName = homePageParameters.TagName,
                    pageNumber = homePageParameters.PageNumber,
                    pageSize = homePageParameters.PageSize
                }));
            }
        }
Example #2
0
        public PagedList <Problem> GetProblems(HomePageParameters homePageParameters)
        {
            var collectionBeforePaging = _context.Problems.OrderBy(p => p.Name).AsQueryable();


            // filtering by Tag Name
            if (!string.IsNullOrEmpty(homePageParameters.TagName))
            {
                var tagTitle = homePageParameters.TagName.Trim().ToLowerInvariant();
                var _tag     = _context.Tags.FirstOrDefault(a => a.Title.ToLowerInvariant() == tagTitle);
                if (_tag != null)
                {
                    Guid tagId = _tag.Id;
                    collectionBeforePaging = collectionBeforePaging.Where(a => _context.ProblemTags.Where(b => b.ProblemId == a.Id && b.TagId == tagId).Any());
                }
            }

            // filtering by [solved/not solved]
            if (!string.IsNullOrEmpty(homePageParameters.Solved))
            {
                User user = GetUser(homePageParameters.UserHandle);

                if (homePageParameters.Solved.Equals("false"))
                {
                    collectionBeforePaging = collectionBeforePaging.Where(a => _context.UserProblems.Count(b => b.UserId == user.Id && b.ProblemId == a.Id) == 0);
                }
                else
                if (homePageParameters.Solved.Equals("true"))
                {
                    collectionBeforePaging = collectionBeforePaging.Where(a => _context.UserProblems.Count(b => b.UserId == user.Id && b.ProblemId == a.Id) == 1);
                }
            }

            // searching for a specific word
            if (!string.IsNullOrEmpty(homePageParameters.Search))
            {
                var word = homePageParameters.Search.Trim().ToLowerInvariant();
                collectionBeforePaging = collectionBeforePaging.Where(a => a.Name.ToLowerInvariant().Contains(word));
            }

            return(PagedList <Problem> .Create(collectionBeforePaging, homePageParameters.PageNumber, homePageParameters.PageSize));
        }
Example #3
0
        public IActionResult GetProblems(HomePageParameters homePageParameters)
        {
            var problemsFromRepo = repo.GetProblems(homePageParameters);

            var previousPageLink = problemsFromRepo.HasPrevious
                                    ? CreateProblemsResourceUri(homePageParameters, ResourceUriType.PreviousPage)
                                    : null;

            var nextPageLink = problemsFromRepo.HasNext
                                    ? CreateProblemsResourceUri(homePageParameters, ResourceUriType.NextPage)
                                    : null;

            var paginationMetaData = new
            {
                totalCount       = problemsFromRepo.TotalCount,
                pageSize         = problemsFromRepo.PageSize,
                currentPage      = problemsFromRepo.CurrentPage,
                totalPages       = problemsFromRepo.TotalPages,
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink
            };

            Response.Headers.Add("X-Pagination",
                                 Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetaData));

            var problems = repo.toDto(problemsFromRepo);

            if (!string.IsNullOrEmpty(homePageParameters.UserHandle))
            {
                var user = repo.GetUser(homePageParameters.UserHandle);
                if (user != null)
                {
                    foreach (var problem in problems)
                    {
                        problem.Solved = repo.IsSolved(user.Id, problem.Id);
                    }
                }
            }

            return(Ok(new { problems, pagedList = paginationMetaData.totalCount }));
        }