1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-29 13:51:37 +08:00

1.优化搜索索引

2.优化服务状态监控
3.优化ChapterUserTrait
This commit is contained in:
xiaochong0302 2024-12-13 08:37:31 +08:00
parent 4bf963c9ab
commit 56d7ddc7d4
12 changed files with 79 additions and 100 deletions

View File

@ -177,13 +177,13 @@ class ServerMonitorTask extends Task
$searcher = new CourseSearcher();
$user = $searcher->search('id:1');
$course = $searcher->search('id:1');
$benchmark->stop();
$elapsedTime = $benchmark->getElapsedTime();
if (empty($user)) {
if (empty($course)) {
return "xunsearch搜索失败";
}
@ -242,4 +242,4 @@ class ServerMonitorTask extends Task
return $coreCount * $processorCount;
}
}
}

View File

@ -31,8 +31,9 @@ class ChapterInfo extends LogicService
protected $user;
use CourseTrait;
use CourseUserTrait;
use ChapterTrait;
use CourseUserTrait;
use ChapterUserTrait;
public function handle($id)
{

View File

@ -0,0 +1,61 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Services\Logic\Chapter;
use App\Models\Chapter as ChapterModel;
use App\Models\ChapterUser as ChapterUserModel;
use App\Models\CourseUser as CourseUserModel;
use App\Models\User as UserModel;
use App\Repos\ChapterUser as ChapterUserRepo;
trait ChapterUserTrait
{
/**
* @var bool
*/
protected $ownedChapter = false;
/**
* @var bool
*/
protected $joinedChapter = false;
/**
* @var ChapterUserModel|null
*/
protected $chapterUser;
public function setChapterUser(ChapterModel $chapter, UserModel $user)
{
if ($user->id == 0) return;
$chapterUser = null;
/**
* @var CourseUserModel $courseUser
*/
$courseUser = $this->courseUser;
if ($courseUser) {
$chapterUserRepo = new ChapterUserRepo();
$chapterUser = $chapterUserRepo->findChapterUser($chapter->id, $user->id);
}
$this->chapterUser = $chapterUser;
if ($chapterUser) {
$this->joinedChapter = true;
}
if ($this->ownedCourse || $chapter->free) {
$this->ownedChapter = true;
}
}
}

View File

@ -7,31 +7,11 @@
namespace App\Services\Logic;
use App\Models\Chapter as ChapterModel;
use App\Models\ChapterUser as ChapterUserModel;
use App\Models\CourseUser as CourseUserModel;
use App\Models\User as UserModel;
use App\Repos\ChapterUser as ChapterUserRepo;
use App\Validators\Chapter as ChapterValidator;
trait ChapterTrait
{
/**
* @var bool
*/
protected $ownedChapter = false;
/**
* @var bool
*/
protected $joinedChapter = false;
/**
* @var ChapterUserModel|null
*/
protected $chapterUser;
public function checkChapterVod($id)
{
$validator = new ChapterValidator();
@ -67,31 +47,4 @@ trait ChapterTrait
return $validator->checkChapterCache($id);
}
public function setChapterUser(ChapterModel $chapter, UserModel $user)
{
if ($user->id == 0) return;
$chapterUser = null;
/**
* @var CourseUserModel $courseUser
*/
$courseUser = $this->courseUser;
if ($courseUser) {
$chapterUserRepo = new ChapterUserRepo();
$chapterUser = $chapterUserRepo->findChapterUser($chapter->id, $user->id);
}
$this->chapterUser = $chapterUser;
if ($chapterUser) {
$this->joinedChapter = true;
}
if ($this->ownedCourse || $chapter->free) {
$this->ownedChapter = true;
}
}
}

View File

@ -50,14 +50,14 @@ class ChapterList extends LogicService
protected function handleLoginUserChapters(array $chapters, CourseModel $course, UserModel $user)
{
$mapping = $this->getLearningMapping($course->id, $user->id, $this->courseUser->plan_id);
$mappings = $this->getLearningMappings($course->id, $user->id, $this->courseUser->plan_id);
foreach ($chapters as &$chapter) {
foreach ($chapter['children'] as &$lesson) {
$owned = ($this->ownedCourse || $lesson['free'] == 1) && $lesson['published'] == 1;
$lesson['me'] = [
'progress' => $mapping[$lesson['id']]['progress'] ?? 0,
'duration' => $mapping[$lesson['id']]['duration'] ?? 0,
'progress' => $mappings[$lesson['id']]['progress'] ?? 0,
'duration' => $mappings[$lesson['id']]['duration'] ?? 0,
'owned' => $owned ? 1 : 0,
'logged' => 1,
];
@ -84,7 +84,7 @@ class ChapterList extends LogicService
return $chapters;
}
protected function getLearningMapping($courseId, $userId, $planId)
protected function getLearningMappings($courseId, $userId, $planId)
{
$courseRepo = new CourseRepo();
@ -92,17 +92,17 @@ class ChapterList extends LogicService
if ($userLearnings->count() == 0) return [];
$mapping = [];
$mappings = [];
foreach ($userLearnings as $learning) {
$mapping[$learning->chapter_id] = [
$mappings[$learning->chapter_id] = [
'progress' => $learning->progress,
'duration' => $learning->duration,
'consumed' => $learning->consumed,
];
}
return $mapping;
return $mappings;
}
}

View File

@ -68,12 +68,6 @@ class Article extends Handler
$owner = json_decode($item['owner'], true);
$tags = json_decode($item['tags'], true);
$owner['avatar'] = $owner['avatar'] ?: kg_default_user_avatar_path();
if (!empty($owner['avatar']) && !Text::startsWith($owner['avatar'], 'http')) {
$owner['avatar'] = $baseUrl . $owner['avatar'];
}
if (!empty($item['cover']) && !Text::startsWith($item['cover'], 'http')) {
$item['cover'] = $baseUrl . $item['cover'];
}

View File

@ -73,12 +73,6 @@ class Course extends Handler
$teacher = json_decode($item['teacher'], true);
$tags = json_decode($item['tags'], true);
$teacher['avatar'] = $teacher['avatar'] ?: kg_default_user_avatar_path();
if (!empty($teacher['avatar']) && !Text::startsWith($teacher['avatar'], 'http')) {
$teacher['avatar'] = $baseUrl . $teacher['avatar'];
}
if (!empty($item['cover']) && !Text::startsWith($item['cover'], 'http')) {
$item['cover'] = $baseUrl . $item['cover'];
}

View File

@ -64,33 +64,17 @@ class Question extends Handler
foreach ($pager->items as $item) {
$lastAnswer = json_decode($item['last_answer'], true);
$acceptAnswer = json_decode($item['accept_answer'], true);
$lastReplier = json_decode($item['last_replier'], true);
$category = json_decode($item['category'], true);
$owner = json_decode($item['owner'], true);
$tags = json_decode($item['tags'], true);
$owner['avatar'] = $owner['avatar'] ?: kg_default_user_avatar_path();
if (!empty($owner['avatar']) && !Text::startsWith($owner['avatar'], 'http')) {
$owner['avatar'] = $baseUrl . $owner['avatar'];
}
if (!empty($item['cover']) && !Text::startsWith($item['cover'], 'http')) {
$item['cover'] = $baseUrl . $item['cover'];
}
$lastAnswer = json_decode($item['last_answer'], true);
if (!empty($lastAnswer['cover']) && !Text::startsWith($lastAnswer['cover'], 'http')) {
$lastAnswer['cover'] = $baseUrl . $lastAnswer['cover'];
}
$acceptAnswer = json_decode($item['accept_answer'], true);
if (!empty($acceptAnswer['cover']) && !Text::startsWith($acceptAnswer['cover'], 'http')) {
$acceptAnswer['cover'] = $baseUrl . $acceptAnswer['cover'];
}
$items[] = [
'id' => (int)$item['id'],
'title' => (string)$item['title'],

View File

@ -22,8 +22,6 @@ class ProfileInfo extends LogicService
protected function handleUser(UserModel $user)
{
$user->avatar = kg_cos_user_avatar_url($user->avatar);
$user->area = $this->handleArea($user->area);
return [

View File

@ -57,6 +57,8 @@ class ArticleDocument extends Injectable
$category = $this->handleCategory($article->category_id);
}
$article->cover = ArticleModel::getCoverPath($article->cover);
return [
'id' => $article->id,
'title' => $article->title,
@ -81,12 +83,9 @@ class ArticleDocument extends Injectable
$user = $userRepo->findById($id);
$user->avatar = UserModel::getAvatarPath($user->avatar);
return kg_json_encode([
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
]);
}

View File

@ -102,12 +102,9 @@ class CourseDocument extends Injectable
$user = $userRepo->findById($id);
$user->avatar = UserModel::getAvatarPath($user->avatar);
return kg_json_encode([
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
]);
}

View File

@ -76,6 +76,8 @@ class QuestionDocument extends Injectable
$acceptAnswer = $this->handleAnswer($question->accept_answer_id);
}
$question->cover = QuestionModel::getCoverPath($question->cover);
return [
'id' => $question->id,
'title' => $question->title,
@ -108,12 +110,9 @@ class QuestionDocument extends Injectable
$user = $userRepo->findById($id);
$user->avatar = UserModel::getAvatarPath($user->avatar);
return kg_json_encode([
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
]);
}
@ -138,7 +137,6 @@ class QuestionDocument extends Injectable
return kg_json_encode([
'id' => $answer->id,
'summary' => $answer->summary,
'cover' => $answer->cover,
]);
}