private IEnumerable <LinkDto> CreateLinksForStores( StoresResourceParameters storesResourceParameters, bool hasNext, bool hasPrevious) { var links = new List <LinkDto> { new LinkDto(CreateStoresResourceUri(storesResourceParameters, ResourceUriType.Current) , "self", "GET") }; if (hasNext) { links.Add( new LinkDto(CreateStoresResourceUri(storesResourceParameters, ResourceUriType.NextPage), "nextPage", "GET")); } if (hasPrevious) { links.Add( new LinkDto(CreateStoresResourceUri(storesResourceParameters, ResourceUriType.PreviousPage), "previousPage", "GET")); } return(links); }
private string CreateStoresResourceUri(StoresResourceParameters storesResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(_urlHelper.Link("GetStores", new { fields = storesResourceParameters.Fields, orderBy = storesResourceParameters.OrderBy, searchQuery = storesResourceParameters.SearchQuery, pageNumber = storesResourceParameters.PageIndex - 1, pageSize = storesResourceParameters.PageSize })); case ResourceUriType.NextPage: return(_urlHelper.Link("GetStores", new { fields = storesResourceParameters.Fields, orderBy = storesResourceParameters.OrderBy, searchQuery = storesResourceParameters.SearchQuery, pageNumber = storesResourceParameters.PageIndex + 1, pageSize = storesResourceParameters.PageSize })); case ResourceUriType.Current: default: return(_urlHelper.Link("GetStores", new { fields = storesResourceParameters.Fields, orderBy = storesResourceParameters.OrderBy, searchQuery = storesResourceParameters.SearchQuery, pageNumber = storesResourceParameters.PageIndex, pageSize = storesResourceParameters.PageSize })); } }
public async Task <IActionResult> GetStoresAsync([FromQuery] StoresResourceParameters storesResourceParameters, [FromHeader(Name = "Accept")] string mediaType) { if (!_propertyMappingService.ValidMappingExistsFor <StoreUiModel, Store> (storesResourceParameters.OrderBy)) { return(BadRequest()); } if (!_typeHelperService.TypeHasProperties <StoreUiModel> (storesResourceParameters.Fields)) { return(BadRequest()); } var storesQueryable = await _inquiryAllStoresProcessor.GetStoresAsync(storesResourceParameters); var stores = Mapper.Map <IEnumerable <StoreUiModel> >(storesQueryable); if (mediaType.Contains("application/vnd.marvin.hateoas+json")) { var paginationMetadata = new { totalCount = storesQueryable.TotalCount, pageSize = storesQueryable.PageSize, currentPage = storesQueryable.CurrentPage, totalPages = storesQueryable.TotalPages, }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); var links = CreateLinksForStores(storesResourceParameters, storesQueryable.HasNext, storesQueryable.HasPrevious); var shapedStores = stores.ShapeData(storesResourceParameters.Fields); var shapedStoresWithLinks = shapedStores.Select(store => { var storeAsDictionary = store as IDictionary <string, object>; var storeLinks = CreateLinksForStore((Guid)storeAsDictionary["Id"], storesResourceParameters.Fields); storeAsDictionary.Add("links", storeLinks); return(storeAsDictionary); }); var linkedCollectionResource = new { value = shapedStoresWithLinks, links = links }; return(Ok(linkedCollectionResource)); } else { var previousPageLink = storesQueryable.HasPrevious ? CreateStoresResourceUri(storesResourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = storesQueryable.HasNext ? CreateStoresResourceUri(storesResourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { previousPageLink = previousPageLink, nextPageLink = nextPageLink, totalCount = storesQueryable.TotalCount, pageSize = storesQueryable.PageSize, currentPage = storesQueryable.CurrentPage, totalPages = storesQueryable.TotalPages }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); return(Ok(stores.ShapeData(storesResourceParameters.Fields))); } }
public Task <PagedList <Store> > GetStoresAsync(StoresResourceParameters storesResourceParameters) { throw new System.NotImplementedException(); }