From 8fb596fb326693faf7d4a48f64e7f9ea519e395b Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Fri, 4 Sep 2026 14:17:04 +0700 Subject: [PATCH] feat: enhance MaterialController and MaterialService; add academic term handling in pagination and index methods --- .../Controllers/Admin/AcademicClasses/MaterialController.php | 3 +++ app/Services/Admin/AcademicClasses/MaterialService.php | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/AcademicClasses/MaterialController.php b/app/Http/Controllers/Admin/AcademicClasses/MaterialController.php index 740f16f..9cc4b4d 100644 --- a/app/Http/Controllers/Admin/AcademicClasses/MaterialController.php +++ b/app/Http/Controllers/Admin/AcademicClasses/MaterialController.php @@ -8,6 +8,7 @@ use App\Models\Material; use App\Services\Admin\AcademicClasses\MaterialService; use App\Services\Admin\Manage\CourseClass\CourseClassService; +use App\Services\Admin\Master\AcademicTermService; use Illuminate\Http\RedirectResponse; use Inertia\Inertia; use Inertia\Response; @@ -17,6 +18,7 @@ class MaterialController extends Controller public function __construct( private readonly MaterialService $service, private readonly CourseClassService $courseClassService, + private readonly AcademicTermService $academicTermService, ) {} public function index(PaginatedRequest $request): Response @@ -26,6 +28,7 @@ public function index(PaginatedRequest $request): Response $request->user(), ...$request->validatedWithDefaults(), courseClassId: $request->validated('course_class_id'), + academicTermId: $this->academicTermService->getActive()?->id, )), 'courseClasses' => $this->courseClassService->getAllForSelect($request->user()), 'filters' => $request->only(['course_class_id']), diff --git a/app/Services/Admin/AcademicClasses/MaterialService.php b/app/Services/Admin/AcademicClasses/MaterialService.php index 0c2057f..40e8988 100644 --- a/app/Services/Admin/AcademicClasses/MaterialService.php +++ b/app/Services/Admin/AcademicClasses/MaterialService.php @@ -17,7 +17,7 @@ public function __construct( private readonly NotificationService $notificationService, ) {} - public function paginated(User $user, int $perPage = 25, string $search = '', ?int $courseClassId = null): LengthAwarePaginator + public function paginated(User $user, int $perPage = 25, string $search = '', ?int $courseClassId = null, ?int $academicTermId = null): LengthAwarePaginator { return Material::query() ->with([ @@ -26,6 +26,7 @@ public function paginated(User $user, int $perPage = 25, string $search = '', ?i ]) ->when($search, fn ($q) => $q->where('title', 'like', "%{$search}%")) ->when($courseClassId, fn ($q) => $q->where('course_class_id', $courseClassId)) + ->when($academicTermId, fn ($q) => $q->whereHas('courseClass', fn ($q) => $q->where('academic_term_id', $academicTermId))) ->when($user->hasRole(UserRole::Dosen->value), fn ($q) => $q->whereHas('courseClass', fn ($q) => $q->where('lecturer_id', $user->lecturer?->id))) ->when($user->hasRole(UserRole::Mahasiswa->value), fn ($q) => $q->whereHas('courseClass', function ($q) use ($user) { $q->whereHas('registrations', function ($q) use ($user) {