- Implemented ClassEnrollmentIndex component for managing class enrollments, including adding and removing students. - Created CourseClassIndex component for managing course classes with CRUD functionality. - Developed columns for course management in createCourseColumns function. - Added CourseIndex component for managing courses with CRUD operations. - Introduced types for class enrollment and course class to enhance type safety. - Updated routes to include endpoints for managing courses, course classes, and enrollments.
44 lines
1.2 KiB
PHP
44 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Admin\Manage;
|
|
|
|
use App\Models\ClassEnrollment;
|
|
use App\Models\CourseClass;
|
|
use App\Models\Student;
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
|
|
class ClassEnrollmentService
|
|
{
|
|
public function forClass(CourseClass $courseClass): Collection
|
|
{
|
|
return $courseClass->enrollments()
|
|
->with(['student.user.profile', 'student.department'])
|
|
->latest('enrolled_at')
|
|
->get();
|
|
}
|
|
|
|
public function availableStudents(CourseClass $courseClass): Collection
|
|
{
|
|
return Student::query()
|
|
->where('department_id', $courseClass->course->department_id)
|
|
->whereDoesntHave('enrollments', fn ($q) => $q->where('course_class_id', $courseClass->id))
|
|
->with(['user.profile', 'department'])
|
|
->get();
|
|
}
|
|
|
|
public function enrollMany(CourseClass $courseClass, array $studentIds): void
|
|
{
|
|
foreach ($studentIds as $studentId) {
|
|
$courseClass->enrollments()->firstOrCreate(
|
|
['student_id' => $studentId],
|
|
['enrolled_at' => now()],
|
|
);
|
|
}
|
|
}
|
|
|
|
public function unenroll(ClassEnrollment $enrollment): bool
|
|
{
|
|
return $enrollment->delete();
|
|
}
|
|
}
|