public async Task <PagedList <SlugEntity> > GetAllSlugsAsync(SlugsResourceParameters slugsResourceParameter) { if (slugsResourceParameter == null) { throw new ArgumentNullException(nameof(slugsResourceParameter)); } IQueryable <SlugEntity> collection = _murlContext.Slugs; var orderedCollection = collection.OrderBy(c => c.Url); return(await PagedList <SlugEntity> .Create(orderedCollection, slugsResourceParameter)); }
private object CreatePaginationMetaData(PagedList <SlugEntity> slugs, SlugsResourceParameters slugsResourceParameters) { string previousPageLink = slugs.HasPrevious ? CreateSlugsResourceUri(slugsResourceParameters, ResourceUriType.PreviousPage) : null; string nextPageLink = slugs.HasNext ? CreateSlugsResourceUri(slugsResourceParameters, ResourceUriType.NextPage) : null; return(new { totalCount = slugs.TotalCount, pageSize = slugs.PageSize, currentPage = slugs.CurrentPage, totalPages = slugs.TotalPages, previousPageLink, nextPageLink }); }
public async Task <ActionResult <IEnumerable <SlugDto> > > GetSlugs([FromQuery] SlugsResourceParameters slugsResourceParameters) { _logger.LogInformation(string.Format($"GetSlugs [HTTP Get]: getting all URL values for page number: {slugsResourceParameters.PageNumber} and page size: {slugsResourceParameters.PageSize}")); // check if slug exists PagedList <SlugEntity> slugs = await _murlRepository.GetAllSlugsAsync(slugsResourceParameters); var paginationMetaData = CreatePaginationMetaData(slugs, slugsResourceParameters); Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetaData)); if (slugs == null || slugs.Count() == 0) { return(new NotFoundObjectResult(new { message = "no URLs found." })); } else { return(new OkObjectResult(slugs)); } }
private string CreateSlugsResourceUri(SlugsResourceParameters slugsResourceParameters, ResourceUriType type) { dynamic routevalues = new ExpandoObject(); routevalues.pageNumber = slugsResourceParameters.PageNumber; routevalues.pageSize = slugsResourceParameters.PageSize; routevalues.mainCategory = slugsResourceParameters.MainCategory; routevalues.searchQuery = slugsResourceParameters.SearchQuery; switch (type) { case ResourceUriType.PreviousPage: routevalues.pageNumber = slugsResourceParameters.PageNumber - 1; break; case ResourceUriType.NextPage: routevalues.pageNumber = slugsResourceParameters.PageNumber + 1; break; default: break; } return(Url.Link("GetSlugs", routevalues)); }