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 })); } }
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)); }
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 })); }