mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-07-21 23:46:39 +08:00
1.优化搜索索引
2.优化服务状态监控 3.优化ChapterUserTrait
This commit is contained in:
parent
6f005f741c
commit
0f38ce7d62
@ -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搜索失败";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
61
app/Services/Logic/Chapter/ChapterUserTrait.php
Normal file
61
app/Services/Logic/Chapter/ChapterUserTrait.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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'];
|
||||||
}
|
}
|
||||||
|
@ -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'];
|
||||||
}
|
}
|
||||||
|
@ -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'],
|
||||||
|
@ -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 [
|
||||||
|
@ -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,
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user