Herkese selamlar,
İlk kez event kullanıyorum ve bir hata ile karşı karşıyayım. Jqueryden bir video tamamlandığında bir istek yapıyorum ve bu istek LessonCompleted eventini tetikliyor. Onun Listeneri ise CreateCertificateForCompletedCourse bu.
Course modelimde böyle bir alan var.
public function areAllLessonsCompleted($user = null): bool
{
if (!$user) {
$user = auth()->user();
}
return $this->lessons->every(function ($lesson) use ($user) {
$userLesson = $lesson->user()->where('user_id', $user->id)->first();
return $userLesson && $userLesson->is_completed == 1 && $userLesson->progress == 100;
});
}
Jquery ajax isteği başarılı bir şekilde çalışıyor. Viewde dd ile $course->areAllLessonsCompleted() yaptığımda true, veritabanında kontrol ettiğimde yine hepsi tamamlanmış durumda olduğunu görüyorum. Fakat bu CreateCertificateForCompletedCourse listener tetiklendiğinde log dosyam bunları basıyor.
[2024-02-19 05:20:50] local.INFO: Lesson completed
[2024-02-19 05:20:50] local.INFO: CreateCertificateForCompletedCourse handle method called
[2024-02-19 05:20:50] local.INFO: Not all lessons completed. Certificate not created.
Event:
class LessonCompleted
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $lesson;
public $user;
public function __construct(User $user, Lesson $lesson)
{
$this->lesson = $lesson;
$this->user = $user;
}
}
Listener:
public function handle(LessonCompleted $event)
{
\Log::info('CreateCertificateForCompletedCourse handle method called');
$lesson = $event->lesson;
$user = $event->user;
$course = $lesson->course;
if ($course && $course->areAllLessonsCompleted($user)) {
\Log::info('All lessons completed. Creating certificate...');
Certificate::create([
'user_id' => $user->id,
'course_id' => $course->id,
'completed_at' => now(),
'status' => 1,
]);
} else {
\Log::info('Not all lessons completed. Certificate not created.');
}
}
Nerede hata yapıyorum acaba?