1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-26 12:23:06 +08:00

优化CourseUserTrait

This commit is contained in:
xiaochong0302 2024-04-06 22:18:41 +08:00
parent 7da5fb0424
commit 02e2c03f8f
6 changed files with 69 additions and 90 deletions

View File

@ -137,7 +137,7 @@ class Review extends Repository
public function countLikes($reviewId)
{
return ReviewLikeModel::count([
return (int)ReviewLikeModel::count([
'conditions' => 'review_id = :review_id: AND deleted = 0',
'bind' => ['review_id' => $reviewId],
]);

View File

@ -14,6 +14,7 @@ use App\Models\CourseUser as CourseUserModel;
use App\Models\User as UserModel;
use App\Repos\ChapterLike as ChapterLikeRepo;
use App\Services\Logic\ChapterTrait;
use App\Services\Logic\Course\CourseUserTrait;
use App\Services\Logic\CourseTrait;
use App\Services\Logic\Service as LogicService;
@ -31,6 +32,7 @@ class ChapterInfo extends LogicService
protected $user;
use CourseTrait;
use CourseUserTrait;
use ChapterTrait;
public function handle($id)
@ -88,8 +90,6 @@ class ChapterInfo extends LogicService
if (!$this->ownedCourse) return;
$courseUser = new CourseUserModel();
$sourceType = CourseUserModel::SOURCE_FREE;
if ($course->market_price > 0) {
@ -100,18 +100,14 @@ class ChapterInfo extends LogicService
}
}
$courseUser->course_id = $course->id;
$courseUser->user_id = $user->id;
$courseUser->source_type = $sourceType;
$courseUser->create();
$courseUser = $this->createCourseUser($course, $user, 0, $sourceType);
$this->courseUser = $courseUser;
$this->joinedCourse = true;
$this->incrCourseUserCount($course);
$this->incrUserCourseCount($user);
$this->recountCourseUsers($course);
$this->recountUserCourses($user);
}
protected function handleChapterUser(ChapterModel $chapter, UserModel $user)
@ -188,20 +184,6 @@ class ChapterInfo extends LogicService
return $me;
}
protected function incrUserCourseCount(UserModel $user)
{
$user->course_count += 1;
$user->update();
}
protected function incrCourseUserCount(CourseModel $course)
{
$course->user_count += 1;
$course->update();
}
protected function incrChapterUserCount(ChapterModel $chapter)
{
$chapter->user_count += 1;

View File

@ -17,6 +17,7 @@ class CourseInfo extends LogicService
{
use CourseTrait;
use CourseUserTrait;
public function handle($id)
{

View File

@ -17,6 +17,67 @@ use App\Repos\User as UserRepo;
trait CourseUserTrait
{
/**
* @var bool
*/
protected $ownedCourse = false;
/**
* @var bool
*/
protected $joinedCourse = false;
/**
* @var CourseUserModel|null
*/
protected $courseUser;
public function setCourseUser(CourseModel $course, UserModel $user)
{
if ($user->id == 0) return;
$courseUserRepo = new CourseUserRepo();
$courseUser = $courseUserRepo->findCourseUser($course->id, $user->id);
$this->courseUser = $courseUser;
if ($courseUser) {
$this->joinedCourse = true;
}
if ($course->market_price == 0) {
$this->ownedCourse = true;
} elseif ($course->market_price > 0 && $course->vip_price == 0 && $user->vip == 1) {
$this->ownedCourse = true;
} elseif ($courseUser) {
$sourceTypes = [
CourseUserModel::SOURCE_CHARGE,
CourseUserModel::SOURCE_MANUAL,
CourseUserModel::SOURCE_POINT_REDEEM,
CourseUserModel::SOURCE_LUCKY_REDEEM,
];
$case1 = $courseUser->deleted == 0;
$case2 = $courseUser->expiry_time > time();
$case3 = in_array($courseUser->source_type, $sourceTypes);
/**
* 之前参与过课程,但不再满足条件,视为未参与
*/
if ($case1 && $case2 && $case3) {
$this->ownedCourse = true;
} else {
$this->joinedCourse = false;
}
}
}
protected function assignUserCourse(CourseModel $course, UserModel $user, int $expiryTime, int $sourceType)
{
$courseUserRepo = new CourseUserRepo();

View File

@ -7,30 +7,11 @@
namespace App\Services\Logic;
use App\Models\Course as CourseModel;
use App\Models\CourseUser as CourseUserModel;
use App\Models\User as UserModel;
use App\Repos\CourseUser as CourseUserRepo;
use App\Validators\Course as CourseValidator;
trait CourseTrait
{
/**
* @var bool
*/
protected $ownedCourse = false;
/**
* @var bool
*/
protected $joinedCourse = false;
/**
* @var CourseUserModel|null
*/
protected $courseUser;
public function checkCourse($id)
{
$validator = new CourseValidator();
@ -45,50 +26,4 @@ trait CourseTrait
return $validator->checkCourseCache($id);
}
public function setCourseUser(CourseModel $course, UserModel $user)
{
if ($user->id == 0) return;
$courseUserRepo = new CourseUserRepo();
$courseUser = $courseUserRepo->findCourseUser($course->id, $user->id);
$this->courseUser = $courseUser;
if ($courseUser) {
$this->joinedCourse = true;
}
if ($course->market_price == 0) {
$this->ownedCourse = true;
} elseif ($course->market_price > 0 && $course->vip_price == 0 && $user->vip == 1) {
$this->ownedCourse = true;
} elseif ($courseUser) {
$sourceTypes = [
CourseUserModel::SOURCE_CHARGE,
CourseUserModel::SOURCE_MANUAL,
CourseUserModel::SOURCE_POINT_REDEEM,
CourseUserModel::SOURCE_LUCKY_REDEEM,
];
$case1 = $courseUser->deleted == 0;
$case2 = $courseUser->expiry_time > time();
$case3 = in_array($courseUser->source_type, $sourceTypes);
/**
* 之前参与过课程,但不再满足条件,视为未参与
*/
if ($case1 && $case2 && $case3) {
$this->ownedCourse = true;
} else {
$this->joinedCourse = false;
}
}
}
}

View File

@ -198,7 +198,7 @@ class Refund extends Service
if (!$courseUser) return 1.00;
$userLearnings = $courseRepo->findUserLearnings($courseId, $userId);
$userLearnings = $courseRepo->findUserLearnings($courseId, $userId, $courseUser->plan_id);
if ($userLearnings->count() == 0) return 1.00;