latest()->get(); } public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?string $semester = null, ?bool $isActive = null): LengthAwarePaginator { return AcademicTerm::query() ->select(['id', 'name', 'semester', 'start_date', 'end_date', 'is_active']) ->when($search, fn ($q) => $q->where('name', 'like', "%{$search}%")) ->when($semester, fn ($q) => $q->where('semester', $semester)) ->when($isActive !== null, fn ($q) => $q->where('is_active', $isActive)) ->orderBy($sort, $direction) ->paginate($perPage); } public function create(array $data): AcademicTerm { return AcademicTerm::create($data); } public function update(AcademicTerm $academicTerm, array $data): AcademicTerm { $academicTerm->name = $data['name']; $academicTerm->semester = $data['semester']; $academicTerm->start_date = $data['start_date']; $academicTerm->end_date = $data['end_date']; $academicTerm->is_active = $data['is_active']; $academicTerm->update(); return $academicTerm; } public function delete(AcademicTerm $academicTerm): bool { return $academicTerm->delete(); } }