feat: enhance MaterialController and MaterialService; add academic term handling in pagination and index methods
This commit is contained in:
parent
56d607a131
commit
8fb596fb32
@ -8,6 +8,7 @@
|
|||||||
use App\Models\Material;
|
use App\Models\Material;
|
||||||
use App\Services\Admin\AcademicClasses\MaterialService;
|
use App\Services\Admin\AcademicClasses\MaterialService;
|
||||||
use App\Services\Admin\Manage\CourseClass\CourseClassService;
|
use App\Services\Admin\Manage\CourseClass\CourseClassService;
|
||||||
|
use App\Services\Admin\Master\AcademicTermService;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Inertia\Inertia;
|
use Inertia\Inertia;
|
||||||
use Inertia\Response;
|
use Inertia\Response;
|
||||||
@ -17,6 +18,7 @@ class MaterialController extends Controller
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly MaterialService $service,
|
private readonly MaterialService $service,
|
||||||
private readonly CourseClassService $courseClassService,
|
private readonly CourseClassService $courseClassService,
|
||||||
|
private readonly AcademicTermService $academicTermService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function index(PaginatedRequest $request): Response
|
public function index(PaginatedRequest $request): Response
|
||||||
@ -26,6 +28,7 @@ public function index(PaginatedRequest $request): Response
|
|||||||
$request->user(),
|
$request->user(),
|
||||||
...$request->validatedWithDefaults(),
|
...$request->validatedWithDefaults(),
|
||||||
courseClassId: $request->validated('course_class_id'),
|
courseClassId: $request->validated('course_class_id'),
|
||||||
|
academicTermId: $this->academicTermService->getActive()?->id,
|
||||||
)),
|
)),
|
||||||
'courseClasses' => $this->courseClassService->getAllForSelect($request->user()),
|
'courseClasses' => $this->courseClassService->getAllForSelect($request->user()),
|
||||||
'filters' => $request->only(['course_class_id']),
|
'filters' => $request->only(['course_class_id']),
|
||||||
|
|||||||
@ -17,7 +17,7 @@ public function __construct(
|
|||||||
private readonly NotificationService $notificationService,
|
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()
|
return Material::query()
|
||||||
->with([
|
->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($search, fn ($q) => $q->where('title', 'like', "%{$search}%"))
|
||||||
->when($courseClassId, fn ($q) => $q->where('course_class_id', $courseClassId))
|
->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::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) {
|
->when($user->hasRole(UserRole::Mahasiswa->value), fn ($q) => $q->whereHas('courseClass', function ($q) use ($user) {
|
||||||
$q->whereHas('registrations', function ($q) use ($user) {
|
$q->whereHas('registrations', function ($q) use ($user) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user