1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-21 15:36:40 +08:00

1.优化搜索索引

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

View File

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

View File

@ -31,8 +31,9 @@ class ChapterInfo extends LogicService
protected $user; protected $user;
use CourseTrait; use CourseTrait;
use CourseUserTrait;
use ChapterTrait; use ChapterTrait;
use CourseUserTrait;
use ChapterUserTrait;
public function handle($id) 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; 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; use App\Validators\Chapter as ChapterValidator;
trait ChapterTrait trait ChapterTrait
{ {
/**
* @var bool
*/
protected $ownedChapter = false;
/**
* @var bool
*/
protected $joinedChapter = false;
/**
* @var ChapterUserModel|null
*/
protected $chapterUser;
public function checkChapterVod($id) public function checkChapterVod($id)
{ {
$validator = new ChapterValidator(); $validator = new ChapterValidator();
@ -67,31 +47,4 @@ trait ChapterTrait
return $validator->checkChapterCache($id); 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) 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 ($chapters as &$chapter) {
foreach ($chapter['children'] as &$lesson) { foreach ($chapter['children'] as &$lesson) {
$owned = ($this->ownedCourse || $lesson['free'] == 1) && $lesson['published'] == 1; $owned = ($this->ownedCourse || $lesson['free'] == 1) && $lesson['published'] == 1;
$lesson['me'] = [ $lesson['me'] = [
'progress' => $mapping[$lesson['id']]['progress'] ?? 0, 'progress' => $mappings[$lesson['id']]['progress'] ?? 0,
'duration' => $mapping[$lesson['id']]['duration'] ?? 0, 'duration' => $mappings[$lesson['id']]['duration'] ?? 0,
'owned' => $owned ? 1 : 0, 'owned' => $owned ? 1 : 0,
'logged' => 1, 'logged' => 1,
]; ];
@ -84,7 +84,7 @@ class ChapterList extends LogicService
return $chapters; return $chapters;
} }
protected function getLearningMapping($courseId, $userId, $planId) protected function getLearningMappings($courseId, $userId, $planId)
{ {
$courseRepo = new CourseRepo(); $courseRepo = new CourseRepo();
@ -92,17 +92,17 @@ class ChapterList extends LogicService
if ($userLearnings->count() == 0) return []; if ($userLearnings->count() == 0) return [];
$mapping = []; $mappings = [];
foreach ($userLearnings as $learning) { foreach ($userLearnings as $learning) {
$mapping[$learning->chapter_id] = [ $mappings[$learning->chapter_id] = [
'progress' => $learning->progress, 'progress' => $learning->progress,
'duration' => $learning->duration, 'duration' => $learning->duration,
'consumed' => $learning->consumed, 'consumed' => $learning->consumed,
]; ];
} }
return $mapping; return $mappings;
} }
} }

View File

@ -68,12 +68,6 @@ class Article extends Handler
$owner = json_decode($item['owner'], true); $owner = json_decode($item['owner'], true);
$tags = json_decode($item['tags'], 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')) { if (!empty($item['cover']) && !Text::startsWith($item['cover'], 'http')) {
$item['cover'] = $baseUrl . $item['cover']; $item['cover'] = $baseUrl . $item['cover'];
} }

View File

@ -73,12 +73,6 @@ class Course extends Handler
$teacher = json_decode($item['teacher'], true); $teacher = json_decode($item['teacher'], true);
$tags = json_decode($item['tags'], 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')) { if (!empty($item['cover']) && !Text::startsWith($item['cover'], 'http')) {
$item['cover'] = $baseUrl . $item['cover']; $item['cover'] = $baseUrl . $item['cover'];
} }

View File

@ -64,33 +64,17 @@ class Question extends Handler
foreach ($pager->items as $item) { 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); $lastReplier = json_decode($item['last_replier'], true);
$category = json_decode($item['category'], true); $category = json_decode($item['category'], true);
$owner = json_decode($item['owner'], true); $owner = json_decode($item['owner'], true);
$tags = json_decode($item['tags'], 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')) { if (!empty($item['cover']) && !Text::startsWith($item['cover'], 'http')) {
$item['cover'] = $baseUrl . $item['cover']; $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[] = [ $items[] = [
'id' => (int)$item['id'], 'id' => (int)$item['id'],
'title' => (string)$item['title'], 'title' => (string)$item['title'],

View File

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

View File

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

View File

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

View File

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