public ActionResult <IEnumerable <IngredientDto> > GetIngredients([FromQuery] IngredientParametersDto ingredientParametersDto) { var ingredientsFromRepo = _ingredientRepository.GetIngredients(ingredientParametersDto); var previousPageLink = ingredientsFromRepo.HasPrevious ? CreateIngredientsResourceUri(ingredientParametersDto, ResourceUriType.PreviousPage) : null; var nextPageLink = ingredientsFromRepo.HasNext ? CreateIngredientsResourceUri(ingredientParametersDto, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = ingredientsFromRepo.TotalCount, pageSize = ingredientsFromRepo.PageSize, pageNumber = ingredientsFromRepo.PageNumber, totalPages = ingredientsFromRepo.TotalPages, hasPrevious = ingredientsFromRepo.HasPrevious, hasNext = ingredientsFromRepo.HasNext, previousPageLink, nextPageLink }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var ingredientsDto = _mapper.Map <IEnumerable <IngredientDto> >(ingredientsFromRepo); return(Ok(ingredientsDto)); }
public PagedList <Ingredient> GetIngredients(IngredientParametersDto ingredientParameters) { if (ingredientParameters == null) { throw new ArgumentNullException(nameof(ingredientParameters)); } var collection = _context.Ingredients as IQueryable <Ingredient>; if (!string.IsNullOrWhiteSpace(ingredientParameters.QueryString)) { var QueryString = ingredientParameters.QueryString.Trim(); collection = collection.Where(i => i.Name.Contains(QueryString) || i.Unit.Contains(QueryString)); } if (!string.IsNullOrWhiteSpace(ingredientParameters.RecipeId.ToString())) { collection = collection.Where(i => i.RecipeId.Equals(ingredientParameters.RecipeId)); } var sieveModel = new SieveModel { Sorts = ingredientParameters.SortOrder, Filters = ingredientParameters.Filters }; collection = _sieveProcessor.Apply(sieveModel, collection); return(PagedList <Ingredient> .Create(collection, ingredientParameters.PageNumber, ingredientParameters.PageSize)); }
private string CreateIngredientsResourceUri( IngredientParametersDto ingredientParametersDto, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetIngredients", new { filters = ingredientParametersDto.Filters, orderBy = ingredientParametersDto.SortOrder, pageNumber = ingredientParametersDto.PageNumber - 1, pageSize = ingredientParametersDto.PageSize, searchQuery = ingredientParametersDto.QueryString })); case ResourceUriType.NextPage: return(Url.Link("GetIngredients", new { filters = ingredientParametersDto.Filters, orderBy = ingredientParametersDto.SortOrder, pageNumber = ingredientParametersDto.PageNumber + 1, pageSize = ingredientParametersDto.PageSize, searchQuery = ingredientParametersDto.QueryString })); default: return(Url.Link("GetIngredients", new { filters = ingredientParametersDto.Filters, orderBy = ingredientParametersDto.SortOrder, pageNumber = ingredientParametersDto.PageNumber, pageSize = ingredientParametersDto.PageSize, searchQuery = ingredientParametersDto.QueryString })); } }