From 43d9bf1ba48cd39cf9c288749c50c6d3e5cc7229 Mon Sep 17 00:00:00 2001 From: Artur Nowakowski Date: Sun, 15 Dec 2019 21:09:14 +0100 Subject: [PATCH] filtering pagination --- api/app/Http/Controllers/Controller.php | 17 +++++++++++++++++ api/app/Http/Controllers/ProductsController.php | 4 ++-- api/app/Http/Controllers/RecipesController.php | 4 ++-- api/app/Repositories/ProductsRepository.php | 9 +++++++-- .../ProductsRepositoryInterface.php | 2 +- api/app/Repositories/RecipesRepository.php | 4 ++-- .../Repositories/RecipesRepositoryInterface.php | 2 +- 7 files changed, 32 insertions(+), 10 deletions(-) diff --git a/api/app/Http/Controllers/Controller.php b/api/app/Http/Controllers/Controller.php index a0a2a8a..7dffbb9 100644 --- a/api/app/Http/Controllers/Controller.php +++ b/api/app/Http/Controllers/Controller.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use Illuminate\Http\Request; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; @@ -10,4 +11,20 @@ use Illuminate\Routing\Controller as BaseController; class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; + + private $paginationSize = 10; + + protected function getFilters(Request $request){ + $filters = ['limit' => $this->paginationSize]; + + if($request->has('limit')){ + $filters['limit'] = $request->query('limit'); + } + + if($request->has('search')){ + $filters['search'] = $request->query('search'); + } + + return $filters; + } } diff --git a/api/app/Http/Controllers/ProductsController.php b/api/app/Http/Controllers/ProductsController.php index 8d9d8e7..f9a79ba 100644 --- a/api/app/Http/Controllers/ProductsController.php +++ b/api/app/Http/Controllers/ProductsController.php @@ -9,7 +9,6 @@ use Illuminate\Http\Request; class ProductsController extends Controller { private $productsRepository; - private $paginationSize = 10; public function __construct(ProductsRepositoryInterface $productsRepository) { @@ -25,7 +24,8 @@ class ProductsController extends Controller public function index(Request $request) { - $products = $this->productsRepository->paginate($this->paginationSize); + $filters = $this->getFilters($request); + $products = $this->productsRepository->paginate($filters); return response()->json(['success' => true, 'data' => ['products' => $products]], 200); } diff --git a/api/app/Http/Controllers/RecipesController.php b/api/app/Http/Controllers/RecipesController.php index c1eff13..c79c0ba 100644 --- a/api/app/Http/Controllers/RecipesController.php +++ b/api/app/Http/Controllers/RecipesController.php @@ -9,7 +9,6 @@ use Illuminate\Http\Request; class RecipesController extends Controller { private $recipesRepository; - private $paginationSize = 10; public function __construct(RecipesRepositoryInterface $recipesRepository) { @@ -25,7 +24,8 @@ class RecipesController extends Controller public function index(Request $request) { - $recipes = $this->recipesRepository->paginate($this->paginationSize); + $filters = $this->getFilters($request); + $recipes = $this->recipesRepository->paginate($filters); return response()->json(['success' => true, 'data' => ['recipes' => $recipes]], 200); } diff --git a/api/app/Repositories/ProductsRepository.php b/api/app/Repositories/ProductsRepository.php index 4f0e5ec..e4ec20e 100644 --- a/api/app/Repositories/ProductsRepository.php +++ b/api/app/Repositories/ProductsRepository.php @@ -13,8 +13,13 @@ class ProductsRepository implements ProductsRepositoryInterface return Product::create($data); } - public function paginate($chunkSize) + public function paginate(array $filters) { - return Product::paginate($chunkSize); + $query = Product::query(); + if(isset($filters['search'])){ + $query->where('name', 'like', "${filters['search']}%"); + } + + return $query->paginate($filters['limit']); } } diff --git a/api/app/Repositories/ProductsRepositoryInterface.php b/api/app/Repositories/ProductsRepositoryInterface.php index 29b1361..e9407c9 100644 --- a/api/app/Repositories/ProductsRepositoryInterface.php +++ b/api/app/Repositories/ProductsRepositoryInterface.php @@ -6,5 +6,5 @@ namespace App\Repositories; interface ProductsRepositoryInterface { public function create($data); - public function paginate($chunkSize); + public function paginate(array $filters); } diff --git a/api/app/Repositories/RecipesRepository.php b/api/app/Repositories/RecipesRepository.php index 494ba21..fef99da 100644 --- a/api/app/Repositories/RecipesRepository.php +++ b/api/app/Repositories/RecipesRepository.php @@ -58,8 +58,8 @@ class RecipesRepository implements RecipesRepositoryInterface } - public function paginate($chunkSize) + public function paginate(array $filters) { - return Recipe::paginate($chunkSize); + return Recipe::paginate($filters['limit']); } } diff --git a/api/app/Repositories/RecipesRepositoryInterface.php b/api/app/Repositories/RecipesRepositoryInterface.php index 6cb1726..da19acb 100644 --- a/api/app/Repositories/RecipesRepositoryInterface.php +++ b/api/app/Repositories/RecipesRepositoryInterface.php @@ -8,5 +8,5 @@ use Illuminate\Support\Collection; interface RecipesRepositoryInterface { public function create(Collection $data); - public function paginate(int $chunkSize); + public function paginate(array $filters); }