feat: enhance MaterialController and MaterialService; add academic term handling in pagination and index methods

This commit is contained in:
Yoga Pangestu 2026-09-04 14:17:04 +07:00
parent 56d607a131
commit 8fb596fb32
2 changed files with 5 additions and 1 deletions

View File

@ -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']),

View File

@ -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) {