public async Task <PagedList <Dish> > GetAllAsync(int restaurantId, DishesResourceParameters dishesResourceParameters) { if (dishesResourceParameters == null) { throw new ArgumentNullException(nameof(dishesResourceParameters)); } var collection = _context.Dishes.Where(d => d.RestaurantId == restaurantId); //filtering if (dishesResourceParameters.MaximumPrice != null) { collection = collection.Where(d => d.Price <= dishesResourceParameters.MaximumPrice); } if (!string.IsNullOrWhiteSpace(dishesResourceParameters.SearchQuery)) { var searchQuery = dishesResourceParameters.SearchQuery.Trim(); collection = collection.Where(d => d.Name.Contains(searchQuery) || d.Description.Contains(searchQuery)); } //sorting if (string.IsNullOrWhiteSpace(dishesResourceParameters.SortBy)) { //default sorting return(await PagedList <Dish> .ToPagedListAsync(collection.OrderBy(d => d.Name), dishesResourceParameters.PageNumber, dishesResourceParameters.PageSize)); } //custom sorting collection = SortDishes(collection, dishesResourceParameters.SortBy, dishesResourceParameters.SortDirection); //pagination return(await PagedList <Dish> .ToPagedListAsync(collection, dishesResourceParameters.PageNumber, dishesResourceParameters.PageSize)); }
public async Task <ActionResult <IEnumerable <DishDto> > > GetDishes(int restaurantId, [FromQuery] DishesResourceParameters dishesResourceParameters) { if (!await _dishesRepository.RestaurantExists(restaurantId)) { return(NotFound()); } var dishes = await _dishesRepository.GetAllAsync(restaurantId, dishesResourceParameters); var metadata = new { dishes.TotalCount, dishes.PagesSize, dishes.CurrentPage, dishes.TotalPages, dishes.HasNext, dishes.HasPrevious, }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(metadata)); return(Ok(_mapper.Map <IEnumerable <DishDto> >(dishes))); }