feat: enhance AssignmentService and MaterialService; add notification functionality for new assignments and materials

This commit is contained in:
Yoga Pangestu 2026-09-04 13:26:41 +07:00
parent facf7ab177
commit 139875ce31
2 changed files with 42 additions and 0 deletions

View File

@ -6,12 +6,18 @@
use App\Enums\RegistrationStatus;
use App\Enums\UserRole;
use App\Models\Assignment;
use App\Models\CourseRegistration;
use App\Models\User;
use App\Services\NotificationService;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Http\UploadedFile;
class AssignmentService
{
public function __construct(
private readonly NotificationService $notificationService,
) {}
public function paginated(User $user, int $perPage = 25, string $search = '', ?int $courseClassId = null, ?int $academicTermId = null): LengthAwarePaginator
{
return Assignment::query()
@ -54,6 +60,21 @@ public function create(array $data, ?UploadedFile $file): Assignment
$assignment->addMedia($file)->toMediaCollection('assignment_attachment');
}
$assignment->load('courseClass.course');
$recipientUserIds = CourseRegistration::query()
->where('course_class_id', $assignment->course_class_id)
->whereHas('submission', fn ($q) => $q->where('status', RegistrationStatus::Approved))
->with('student:id,user_id')
->get()
->pluck('student.user_id');
$this->notificationService->sendToUsers(
$recipientUserIds,
'Tugas Baru',
"Tugas baru \"{$assignment->title}\" telah ditambahkan pada kelas {$assignment->courseClass->course->name}.",
);
return $assignment;
}

View File

@ -4,13 +4,19 @@
use App\Enums\RegistrationStatus;
use App\Enums\UserRole;
use App\Models\CourseRegistration;
use App\Models\Material;
use App\Models\User;
use App\Services\NotificationService;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Http\UploadedFile;
class MaterialService
{
public function __construct(
private readonly NotificationService $notificationService,
) {}
public function paginated(User $user, int $perPage = 25, string $search = '', ?int $courseClassId = null): LengthAwarePaginator
{
return Material::query()
@ -42,6 +48,21 @@ public function create(array $data, ?UploadedFile $file): Material
$material->addMedia($file)->toMediaCollection('materials');
}
$material->load('courseClass.course');
$recipientUserIds = CourseRegistration::query()
->where('course_class_id', $material->course_class_id)
->whereHas('submission', fn ($q) => $q->where('status', RegistrationStatus::Approved))
->with('student:id,user_id')
->get()
->pluck('student.user_id');
$this->notificationService->sendToUsers(
$recipientUserIds,
'Materi Baru',
"Materi baru \"{$material->title}\" telah ditambahkan pada kelas {$material->courseClass->course->name}.",
);
return $material;
}