예제 #1
0
        public IActionResult GetStudents(
            [FromQuery] StudentsResourceParameters studentsResourceParameters)
        {
            var studentsFromRepo = _repo.GetStudents(studentsResourceParameters);

            var previousPageLink = studentsFromRepo.HasPrevious ?
                                   CreateStudentsResourceUri(studentsResourceParameters,
                                                             ResourceUriType.PreviousPage) : null;

            var nextPageLink = studentsFromRepo.HasNext ?
                               CreateStudentsResourceUri(studentsResourceParameters,
                                                         ResourceUriType.NextPage) : null;

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

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));
            return(base.Ok(_mapper.Map <IEnumerable <StudentDto> >(studentsFromRepo)));
        }
        public PagedList <Student> GetStudents(
            StudentsResourceParameters studentResourceParameters)
        {
            if (studentResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(studentResourceParameters));
            }

            var collection = _context.Students as IQueryable <Student>;

            if (!String.IsNullOrWhiteSpace(studentResourceParameters.HouseName))
            {
                var houseName = studentResourceParameters.HouseName.Trim();
                collection = collection.Where(s => s.House.Name == houseName);
            }
            if (!String.IsNullOrWhiteSpace(studentResourceParameters.SearchQuery))
            {
                var searchQuery = studentResourceParameters.SearchQuery.ToLower().Trim();
                collection = collection.Where(s => s.FirstName.ToLower().Contains(searchQuery) ||
                                              s.MiddleNames.ToLower().Contains(searchQuery) ||
                                              s.LastName.ToLower().Contains(searchQuery));
            }
            if (studentResourceParameters.IncludeHouse)
            {
                collection = collection.Include(s => s.House);
            }

            return(PagedList <Student> .Create(collection,
                                               studentResourceParameters.PageNumber,
                                               studentResourceParameters.PageSize));
        }
예제 #3
0
        private string CreateStudentsResourceUri(
            StudentsResourceParameters studentsResourceParameters,
            ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link("GetStudents",
                                new
                {
                    pageNumber = studentsResourceParameters.PageNumber - 1,
                    pageSize = studentsResourceParameters.PageSize,
                    mainCategory = studentsResourceParameters.HouseName,
                    searchQuery = studentsResourceParameters.SearchQuery
                }));

            case ResourceUriType.NextPage:
                return(Url.Link("GetStudents",
                                new
                {
                    pageNumber = studentsResourceParameters.PageNumber + 1,
                    pageSize = studentsResourceParameters.PageSize,
                    mainCategory = studentsResourceParameters.HouseName,
                    searchQuery = studentsResourceParameters.SearchQuery
                }));

            default:
                return(Url.Link("GetStudents",
                                new
                {
                    pageNumber = studentsResourceParameters.PageNumber,
                    pageSize = studentsResourceParameters.PageSize,
                    mainCategory = studentsResourceParameters.HouseName,
                    searchQuery = studentsResourceParameters.SearchQuery
                }));
            }
        }