From b831de63e41bd7f3aef01e36c87aba099406cfab Mon Sep 17 00:00:00 2001 From: Kamil Niemczycki Date: Wed, 16 Feb 2022 14:18:56 +0100 Subject: [PATCH] Added filters for projects --- app/Http/Controllers/Api/ProjectController.php | 13 +++++++++++-- app/Repository/Interfaces/ProjectRepository.php | 2 +- app/Repository/ProjectRepository.php | 8 +++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 4bd7f0c..2fe62c2 100644 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -6,6 +6,7 @@ namespace App\Http\Controllers\Api; use App\Repository\Interfaces\ProjectRepository; use App\Http\Controllers\Controller; +use Illuminate\Http\Request; class ProjectController extends Controller { @@ -14,9 +15,17 @@ class ProjectController extends Controller private ProjectRepository $projectRepository ) {} - public function index() + public function index(Request $request) { - return $this->projectRepository->all(); + $request->validate([ + 'category' => 'nullable|string|exists:categories,slug' + ]); + $filters = []; + if ($request->has('category') && ($category = $request->get('category')) !== '') { + $filters['category'] = $category; + } + + return $this->projectRepository->all($filters); } public function show(int $project) diff --git a/app/Repository/Interfaces/ProjectRepository.php b/app/Repository/Interfaces/ProjectRepository.php index 3143c6f..af7925a 100644 --- a/app/Repository/Interfaces/ProjectRepository.php +++ b/app/Repository/Interfaces/ProjectRepository.php @@ -11,7 +11,7 @@ use Illuminate\Support\Collection; interface ProjectRepository { - public function all(): Collection; + public function all(array $filters = []): Collection; public function get(int $id): ProjectResource; public function update(Project $project, array $data = []): bool; public function create(array $data = []): Project; diff --git a/app/Repository/ProjectRepository.php b/app/Repository/ProjectRepository.php index 27f1a86..974ca17 100644 --- a/app/Repository/ProjectRepository.php +++ b/app/Repository/ProjectRepository.php @@ -8,6 +8,7 @@ use App\Http\Resources\ProjectCollection; use App\Http\Resources\ProjectResource; use App\Models\Project; use App\Repository\Interfaces\ProjectRepository as ProjectRepositoryInterface; +use Illuminate\Database\Query\Builder; use Illuminate\Support\Collection; class ProjectRepository implements ProjectRepositoryInterface @@ -19,12 +20,17 @@ class ProjectRepository implements ProjectRepositoryInterface private Project $project ) {} - public function all(): Collection + public function all(array $filters = []): Collection { $project = $this->project ->query() ->orderBy('release_data', 'ASC'); + foreach ($filters as $filter_name => $filter_value) { + if ($filter_name === 'category' && $filter_value !== 'all') + $project->where('categories', 'like', '%"'. $filter_value .'"%'); + } + if (!$this->auth) $project->visibled();