public PagedList <Photographer> GetPhotographers(PhotographersResourceParameters photographersResourceParameters)
        {
            var collectionBeforePaging =
                _context.Photographers.ApplySort(photographersResourceParameters.OrderBy,
                                                 _propertyMappingService.GetPropertyMapping <PhotographerDto, Photographer> ());

            if (!string.IsNullOrEmpty(photographersResourceParameters.Genre))
            {
                var genreForWhereClause = photographersResourceParameters.Genre
                                          .Trim().ToLowerInvariant();
                collectionBeforePaging = collectionBeforePaging
                                         .Where(a => a.Genre.ToLowerInvariant() == genreForWhereClause);
            }
            if (!string.IsNullOrEmpty(photographersResourceParameters.SearchQuery))
            {
                var searchQueryForWhereClause = photographersResourceParameters.SearchQuery
                                                .Trim().ToLowerInvariant();
                collectionBeforePaging = collectionBeforePaging
                                         .Where(a => a.Genre.ToLowerInvariant().Contains(searchQueryForWhereClause) ||
                                                a.FirstName.ToLowerInvariant().Contains(searchQueryForWhereClause) ||
                                                a.LastName.ToLowerInvariant().Contains(searchQueryForWhereClause));
            }
            return(PagedList <Photographer> .Create(collectionBeforePaging,
                                                    photographersResourceParameters.PageNumber,
                                                    photographersResourceParameters.PageSize));
        }
示例#2
0
        private string CreatePhotographersResourceUri(
            PhotographersResourceParameters photographersResourceParameters,
            ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(_urlHelper.Link("GetPhotographers",
                                       new
                {
                    orderBy = photographersResourceParameters.OrderBy,
                    searchQuery = photographersResourceParameters.SearchQuery,
                    genre = photographersResourceParameters.Genre,
                    pageNumber = photographersResourceParameters.PageNumber - 1,
                    pageSize = photographersResourceParameters.PageSize
                }));

            case ResourceUriType.NextPage:
                return(_urlHelper.Link("GetPhotographers",
                                       new
                {
                    orderBy = photographersResourceParameters.OrderBy,
                    searchQuery = photographersResourceParameters.SearchQuery,
                    genre = photographersResourceParameters.Genre,
                    pageNumber = photographersResourceParameters.PageNumber + 1,
                    pageSize = photographersResourceParameters.PageSize
                }));

            case ResourceUriType.Current:
            default:
                return(_urlHelper.Link("GetPhotographers",
                                       new
                {
                    orderBy = photographersResourceParameters.OrderBy,
                    searchQuery = photographersResourceParameters.SearchQuery,
                    genre = photographersResourceParameters.Genre,
                    pageNumber = photographersResourceParameters.PageNumber,
                    pageSize = photographersResourceParameters.PageSize
                }));
            }
        }
示例#3
0
        public IActionResult GetPhotographers(PhotographersResourceParameters photographersResourceParameters)
        {
            if (!_propertyMappingService.ValidMappingExistsFor <PhotographerDto, Photographer>
                    (photographersResourceParameters.OrderBy))
            {
                return(BadRequest());
            }

            var photographersFromRepo = _magnumPhotosRepository.GetPhotographers(photographersResourceParameters);

            var previousPageLink = photographersFromRepo.HasPrevious ?
                                   CreatePhotographersResourceUri(photographersResourceParameters,
                                                                  ResourceUriType.PreviousPage) : null;

            var nextPageLink = photographersFromRepo.HasNext ?
                               CreatePhotographersResourceUri(photographersResourceParameters,
                                                              ResourceUriType.NextPage) : null;

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

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

            var photographers = Mapper.Map <IEnumerable <PhotographerDto> > (photographersFromRepo);

            var wrapper = new LinkedCollectionResourceWrapper <PhotographerDto> (photographers);

            return(Ok(CreateLinksForPhotographers(wrapper)));
        }