public async Task <IActionResult> GetImages(ImagesResourceParameters imagesResourceParameters) { if (!this.propertyMappingService.ValidMappingExistsFor <ImageDto, Image>(imagesResourceParameters.OrderBy)) { return(BadRequest()); } if (!this.typeHelperService.TypeHasProperties <ImageDto>(imagesResourceParameters.Fields)) { return(BadRequest()); } var imagesFromRepo = await galleryRepository.GetImages(imagesResourceParameters); var previousPageLink = imagesFromRepo.HasPrevious ? CreateImagesResourceUri(imagesResourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = imagesFromRepo.HasNext ? CreateImagesResourceUri(imagesResourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = imagesFromRepo.TotalCount, pageSize = imagesFromRepo.PageSize, currentPage = imagesFromRepo.CurrentPage, totalPages = imagesFromRepo.TotalPages, previousPageLink = previousPageLink, nextPageLink = nextPageLink }; Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata)); var imagesToReturn = Mapper.Map <IEnumerable <ImageDto> >(imagesFromRepo); imagesToReturn = imagesToReturn.Select(x => { x = CreateLinksForImage(x); return(x); }); return(Ok(imagesToReturn.ShapeData(imagesResourceParameters.Fields))); }
public async Task <PagedList <Image> > GetImages(ImagesResourceParameters imagesResourceParameters) { //var collection = this.context.Images // .OrderBy(i => i.Title) // .AsQueryable(); var collection = this.context.Images .ApplySort(imagesResourceParameters.OrderBy, propertyMappingService.GetPropertyMapping <ImageDto, Image>()); if (!string.IsNullOrEmpty(imagesResourceParameters.Title)) { var titleForWhereClause = imagesResourceParameters.Title.Trim().ToLowerInvariant(); collection = collection.Where(x => x.Title.ToLowerInvariant() == titleForWhereClause); } return(await PagedList <Image> .Create(collection, imagesResourceParameters.PageNumber, imagesResourceParameters.PageSize)); }
private string CreateImagesResourceUri(ImagesResourceParameters imagesResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(this.urlHelper.Link("GetImages", new { fields = imagesResourceParameters.Fields, orderBy = imagesResourceParameters.OrderBy, title = imagesResourceParameters.Title, pageNumber = imagesResourceParameters.PageNumber - 1, pageSize = imagesResourceParameters.PageSize })); case ResourceUriType.NextPage: return(this.urlHelper.Link("GetImages", new { fields = imagesResourceParameters.Fields, orderBy = imagesResourceParameters.OrderBy, title = imagesResourceParameters.Title, pageNumber = imagesResourceParameters.PageNumber + 1, pageSize = imagesResourceParameters.PageSize })); default: return(this.urlHelper.Link("GetAuthors", new { fields = imagesResourceParameters.Fields, orderBy = imagesResourceParameters.OrderBy, title = imagesResourceParameters.Title, pageNumber = imagesResourceParameters.PageNumber, pageSize = imagesResourceParameters.PageSize })); } }