request->getPost(); $course = $this->checkCourse($post['course_id']); $user = $this->getLoginUser(); $validator = new CourseUserValidator(); $courseUser = $validator->checkCourseUser($course->id, $user->id); $validator->checkIfReviewed($course->id, $user->id); $data = $this->handlePostData($post); $data['course_id'] = $course->id; $data['owner_id'] = $user->id; $data['published'] = ReviewModel::PUBLISH_PENDING; $review = new ReviewModel(); $review->create($data); $this->updateCourseUserReview($courseUser); $this->recountCourseReviews($course); $this->updateCourseRating($course); $this->handleReviewPoint($review); $this->eventsManager->fire('Review:afterCreate', $this, $review); return $review; } protected function updateCourseUserReview(CourseUserModel $courseUser) { $courseUser->reviewed = 1; $courseUser->update(); } protected function updateCourseRating(CourseModel $course) { $service = new CourseStatService(); $service->updateRating($course->id); } protected function recountCourseReviews(CourseModel $course) { $courseRepo = new CourseRepo(); $reviewCount = $courseRepo->countReviews($course->id); $course->review_count = $reviewCount; $course->update(); } protected function handleReviewPoint(ReviewModel $review) { $service = new CourseReviewPointHistory(); $service->handle($review); } }