feat: enhance AssignmentService and MaterialService; add notification functionality for new assignments and materials
This commit is contained in:
parent
facf7ab177
commit
139875ce31
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user