checkCourse($id); $user = $this->getLoginUser(); $validator = new UserDailyLimitValidator(); $validator->checkFavoriteLimit($user); $favoriteRepo = new CourseFavoriteRepo(); $favorite = $favoriteRepo->findCourseFavorite($course->id, $user->id); if (!$favorite) { $favorite = new CourseFavoriteModel(); $favorite->create([ 'course_id' => $course->id, 'user_id' => $user->id, ]); $this->incrCourseFavoriteCount($course); } else { if ($favorite->deleted == 0) { $favorite->update(['deleted' => 1]); $this->decrCourseFavoriteCount($course); } else { $favorite->update(['deleted' => 0]); $this->incrCourseFavoriteCount($course); } } $this->incrUserDailyFavoriteCount($user); } protected function incrCourseFavoriteCount(CourseModel $course) { $this->eventsManager->fire('courseCounter:incrFavoriteCount', $this, $course); } protected function decrCourseFavoriteCount(CourseModel $course) { $this->eventsManager->fire('courseCounter:decrFavoriteCount', $this, $course); } protected function incrUserDailyFavoriteCount(UserModel $user) { $this->eventsManager->fire('userDailyCounter:incrFavoriteCount', $this, $user); } }