filtering pagination
This commit is contained in:
parent
911434a2c8
commit
43d9bf1ba4
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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']);
|
||||
}
|
||||
}
|
||||
|
@ -6,5 +6,5 @@ namespace App\Repositories;
|
||||
interface ProductsRepositoryInterface
|
||||
{
|
||||
public function create($data);
|
||||
public function paginate($chunkSize);
|
||||
public function paginate(array $filters);
|
||||
}
|
||||
|
@ -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']);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user