Skip to content

Commit 2797e18

Browse files
committed
refactor: use QueryBuilder instead of AdminStudentService in students index
1 parent 5d4ebe1 commit 2797e18

File tree

5 files changed

+48
-37
lines changed

5 files changed

+48
-37
lines changed

app/Filters/FullNameFilter.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Filters;
4+
5+
use Illuminate\Database\Eloquent\Builder;
6+
use Spatie\QueryBuilder\Filters\Filter;
7+
8+
class FullNameFilter implements Filter
9+
{
10+
public function __invoke(Builder $query, $value, string $property): void
11+
{
12+
$value = strtolower(trim($value));
13+
14+
$parts = preg_split('/\s+/', $value); // rozdzielenie po spacjach (zeby wyszukiwalo jesli podamy i imie, i nazwisko)
15+
16+
$query->where(function ($q) use ($parts) {
17+
if (count($parts) === 1) {
18+
$q->whereRaw('LOWER(name) LIKE ?', ["%{$parts[0]}%"])
19+
->orWhereRaw('LOWER(last_name) LIKE ?', ["%{$parts[0]}%"]);
20+
} else {
21+
foreach ($parts as $part) {
22+
$q->where(function ($subQ) use ($part) {
23+
$subQ->whereRaw('LOWER(name) LIKE ?', ["%{$part}%"])
24+
->orWhereRaw('LOWER(last_name) LIKE ?', ["%{$part}%"]);
25+
});
26+
}
27+
}
28+
});
29+
}
30+
}

app/Http/Controllers/Admin/AdminStudentController.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22

33
namespace App\Http\Controllers\Admin;
44

5+
use App\Filters\FullNameFilter;
56
use App\Http\Controllers\Controller;
67
use App\Http\Resources\UserCollection;
7-
use App\Services\Admin\AdminStudentService;
8-
use Illuminate\Http\Request;
8+
use App\Models\User;
9+
use Spatie\QueryBuilder\AllowedFilter;
10+
use Spatie\QueryBuilder\QueryBuilder;
911

1012
class AdminStudentController extends Controller
1113
{
12-
public function __construct(private readonly AdminStudentService $adminStudentService) {}
13-
14-
public function index(Request $request): UserCollection
14+
public function __construct() {}
15+
public function index(): UserCollection
1516
{
16-
return new UserCollection($this->adminStudentService->index($request)->paginate(self::PER_PAGE));
17+
return new UserCollection(QueryBuilder::for(User::role('driver'))
18+
->allowedFilters(AllowedFilter::custom('search', new FullNameFilter()))
19+
->paginate(self::PER_PAGE));
1720
}
1821
}

app/Http/Controllers/CourseRegistration/AdminCourseRegistrationController.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@
99
use App\Http\Resources\CourseUserResource;
1010
use App\Models\CourseRegistration;
1111
use App\Services\CourseRegistrationService;
12+
use Illuminate\Http\JsonResponse;
13+
use Illuminate\Http\Request;
14+
use Symfony\Component\HttpFoundation\Response;
1215

1316
class AdminCourseRegistrationController extends Controller
1417
{
1518
public function __construct(protected CourseRegistrationService $courseRegistrationService) {}
1619

17-
public function index(): CourseRegistrationCollection
20+
public function index(Request $request): CourseRegistrationCollection
1821
{
19-
return new CourseRegistrationCollection($this->courseRegistrationService->index());
22+
return new CourseRegistrationCollection($this->courseRegistrationService->index($request)->paginate(self::PER_PAGE));
2023
}
2124

2225
public function store(StoreCourseRegistrationRequest $request): CourseUserResource

app/Services/Admin/AdminStudentService.php

Lines changed: 0 additions & 26 deletions
This file was deleted.

app/Services/CourseRegistrationService.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66
use App\Models\CourseRegistration;
77
use App\Models\User;
88
use App\ValueObjects\CreateCourseRegistration;
9-
use Illuminate\Support\Collection;
9+
use Illuminate\Database\Eloquent\Builder;
10+
use Illuminate\Http\Request;
1011
use Illuminate\Support\Facades\Hash;
1112
use Illuminate\Support\Str;
1213

1314
class CourseRegistrationService
1415
{
15-
public function index(): Collection
16+
public function index(Request $request): Builder
1617
{
17-
return CourseRegistration::all();
18+
return CourseRegistration::query();
1819
}
1920

2021
public function store(CreateCourseRegistration $data): CourseRegistration

0 commit comments

Comments
 (0)