feat: simplify pagination methods by removing sort and direction parameters
Some checks failed
tests / ci (pull_request) Has been cancelled

This commit is contained in:
Yoga Pangestu 2026-08-30 11:23:02 +07:00
parent b76d82c2f0
commit 62ac0a4c1d
16 changed files with 30 additions and 34 deletions

View File

@ -20,8 +20,6 @@ public function rules(): array
return [
'per_page' => ['nullable', 'integer', 'in:25,50,100,999999'],
'search' => ['nullable', 'string', 'max:255'],
'sort' => ['nullable', 'string'],
'direction' => ['nullable', 'string', 'in:asc,desc'],
'highlight' => ['nullable', 'integer'],
'gender' => ['nullable', 'string', Rule::in(Gender::values())],
'department_id' => ['nullable', 'integer'],
@ -43,8 +41,6 @@ public function validatedWithDefaults(): array
return [
'perPage' => $validated['per_page'] ?? 25,
'search' => $validated['search'] ?? '',
'sort' => $validated['sort'] ?? 'created_at',
'direction' => $validated['direction'] ?? 'desc',
];
}
}

View File

@ -8,7 +8,7 @@
class AssignmentService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?int $courseClassId = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?int $courseClassId = null): LengthAwarePaginator
{
return Assignment::query()
->select(['id', 'course_class_id', 'title', 'description', 'deadline'])
@ -16,7 +16,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort =
->with('courseClass.course:id,code,name')
->when($search, fn ($q) => $q->where('title', 'like', "%{$search}%"))
->when($courseClassId, fn ($q) => $q->where('course_class_id', $courseClassId))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -9,7 +9,7 @@
class CourseRegistrationService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?string $status = null, ?int $academicTermId = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?string $status = null, ?int $academicTermId = null): LengthAwarePaginator
{
return CourseRegistration::query()
->select(['id', 'student_id', 'academic_term_id', 'course_class_id', 'status', 'approved_by', 'created_at'])
@ -24,7 +24,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort =
->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))))
->when($status, fn ($q) => $q->where('status', $status))
->when($academicTermId, fn ($q) => $q->where('academic_term_id', $academicTermId))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -8,14 +8,14 @@
class MaterialService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?int $courseClassId = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?int $courseClassId = null): LengthAwarePaginator
{
return Material::query()
->select(['id', 'course_class_id', 'title', 'description', 'meeting_number'])
->with('courseClass.course:id,code,name')
->when($search, fn ($q) => $q->where('title', 'like', "%{$search}%"))
->when($courseClassId, fn ($q) => $q->where('course_class_id', $courseClassId))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -7,14 +7,14 @@
class AnnouncementService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?int $departmentId = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?int $departmentId = null): LengthAwarePaginator
{
return Announcement::query()
->select(['id', 'title', 'content', 'department_id', 'enrollment_year', 'created_by', 'created_at'])
->with(['department:id,name', 'creator.profile'])
->when($search, fn ($q) => $q->where('title', 'like', "%{$search}%"))
->when($departmentId, fn ($q) => $q->where('department_id', $departmentId))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -40,14 +40,14 @@ public function __construct()
$this->sanitizer = new HtmlSanitizer($config);
}
public function paginated(User $user, int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?string $type = null, ?string $status = null): LengthAwarePaginator
public function paginated(User $user, int $perPage = 25, string $search = '', ?string $type = null, ?string $status = null): LengthAwarePaginator
{
return Feedback::query()
->where('user_id', $user->id)
->when($search, fn ($q) => $q->where('subject', 'like', "%{$search}%"))
->when($type, fn ($q) => $q->where('type', $type))
->when($status, fn ($q) => $q->where('status', $status))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -7,7 +7,7 @@
class TuitionInvoiceService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?int $academicTermId = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?int $academicTermId = null): LengthAwarePaginator
{
return TuitionInvoice::query()
->select(['id', 'student_id', 'academic_term_id', 'amount_due', 'due_date'])
@ -17,7 +17,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort =
->when($search, fn ($q) => $q->whereHas('student', fn ($q) => $q->where('student_number', 'like', "%{$search}%")
->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))))
->when($academicTermId, fn ($q) => $q->where('academic_term_id', $academicTermId))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -15,7 +15,7 @@ public function getAllForSelect(): Collection
->get();
}
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?int $academicTermId = null, ?string $method = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?int $academicTermId = null, ?string $method = null): LengthAwarePaginator
{
return CourseClass::query()
->select(['id', 'course_id', 'lecturer_id', 'academic_term_id', 'class_name', 'method'])
@ -25,7 +25,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort =
->orWhereHas('course', fn ($q) => $q->where('name', 'like', "%{$search}%")->orWhere('code', 'like', "%{$search}%")))
->when($academicTermId, fn ($q) => $q->where('academic_term_id', $academicTermId))
->when($method, fn ($q) => $q->where('method', $method))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -13,14 +13,14 @@ public function getAllForSelect(): Collection
return Course::select(['id', 'code', 'name', 'department_id'])->get();
}
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?int $departmentId = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?int $departmentId = null): LengthAwarePaginator
{
return Course::query()
->select(['id', 'code', 'name', 'credits', 'department_id', 'semester_number'])
->with('department:id,name')
->when($search, fn ($q) => $q->where('name', 'like', "%{$search}%")->orWhere('code', 'like', "%{$search}%"))
->when($departmentId, fn ($q) => $q->where('department_id', $departmentId))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -14,14 +14,14 @@ public function getAllForSelect(): Collection
return AcademicTerm::select(['id', 'name', 'semester', 'start_date', 'end_date', 'is_active'])->latest()->get();
}
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?string $semester = null, ?bool $isActive = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?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)
->latest()
->paginate($perPage);
}

View File

@ -13,12 +13,12 @@ public function getAllForSelect(): Collection
return Department::select(['id', 'code', 'name'])->get();
}
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc'): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = ''): LengthAwarePaginator
{
return Department::query()
->select(['id', 'code', 'name', 'degree_level'])
->when($search, fn ($q) => $q->where('name', 'like', "%{$search}%")->orWhere('code', 'like', "%{$search}%"))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -7,7 +7,7 @@
class AcademicAdvisingLogService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?int $lecturerId = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?int $lecturerId = null): LengthAwarePaginator
{
return AcademicAdvisingLog::query()
->select(['id', 'student_id', 'lecturer_id', 'topic', 'notes', 'session_date', 'created_at'])
@ -20,7 +20,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort =
->orWhereHas('student', fn ($q) => $q->where('student_number', 'like', "%{$search}%")
->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))))
->when($lecturerId, fn ($q) => $q->where('lecturer_id', $lecturerId))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -9,7 +9,7 @@
class LetterRequestService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?string $status = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?string $status = null): LengthAwarePaginator
{
return LetterRequest::query()
->select(['id', 'student_id', 'letter_type', 'purpose', 'status', 'processed_by', 'submitted_at', 'completed_at'])
@ -18,7 +18,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort =
->orWhereHas('student', fn ($q) => $q->where('student_number', 'like', "%{$search}%")
->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))))
->when($status, fn ($q) => $q->where('status', $status))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -9,7 +9,7 @@
class AdministratorService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?string $gender = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?string $gender = null): LengthAwarePaginator
{
return User::with(['profile', 'roles'])
->whereHas('roles', fn ($q) => $q->whereIn('name', ['staff-admin', 'staff-keuangan']))
@ -19,7 +19,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort =
->orWhereHas('profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"));
}))
->when($gender, fn ($q) => $q->whereHas('profile', fn ($q) => $q->where('gender', $gender)))
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -17,10 +17,10 @@ public function getAllForSelect(): Collection
return Lecturer::with('user.profile')->get();
}
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?string $gender = null, ?int $departmentId = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?string $gender = null, ?int $departmentId = null): LengthAwarePaginator
{
return $this->filteredQuery($search, $gender, $departmentId)
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}

View File

@ -17,10 +17,10 @@ public function getAllForSelect(): Collection
return Student::with(['user.profile', 'department'])->get();
}
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?string $gender = null, ?int $departmentId = null, ?string $status = null): LengthAwarePaginator
public function paginated(int $perPage = 25, string $search = '', ?string $gender = null, ?int $departmentId = null, ?string $status = null): LengthAwarePaginator
{
return $this->filteredQuery($search, $gender, $departmentId, $status)
->orderBy($sort, $direction)
->latest()
->paginate($perPage);
}