with('course:id,code,name') ->get(); } public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', array $filters = []): LengthAwarePaginator { return CourseClass::query() ->select(['id', 'course_id', 'lecturer_id', 'academic_term_id', 'class_name', 'method']) ->withCount('enrollments') ->with(['course:id,code,name,department_id', 'lecturer.user.profile', 'academicTerm:id,name,semester,start_date,end_date']) ->when($search, fn ($q) => $q->where('class_name', 'like', "%{$search}%") ->orWhereHas('course', fn ($q) => $q->where('name', 'like', "%{$search}%")->orWhere('code', 'like', "%{$search}%"))) ->orderBy($sort, $direction) ->paginate($perPage); } public function create(array $data): CourseClass { return CourseClass::create($data); } public function update(CourseClass $courseClass, array $data): CourseClass { $courseClass->course_id = $data['course_id']; $courseClass->lecturer_id = $data['lecturer_id']; $courseClass->academic_term_id = $data['academic_term_id']; $courseClass->class_name = $data['class_name'] ?? null; $courseClass->method = $data['method'] ?? null; $courseClass->update(); return $courseClass; } public function delete(CourseClass $courseClass): bool { return $courseClass->delete(); } }