1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-23 03:50:56 +08:00
2020-09-17 21:29:29 +08:00

122 lines
3.2 KiB
PHP

<?php
namespace App\Services\Logic\Chapter;
use App\Models\Chapter as ChapterModel;
use App\Models\Course as CourseModel;
use App\Repos\Chapter as ChapterRepo;
use App\Services\ChapterVod as ChapterVodService;
use App\Services\Live as LiveService;
use App\Services\Logic\ChapterTrait;
use App\Services\Logic\CourseTrait;
use App\Services\Logic\Service;
class BasicInfo extends Service
{
use CourseTrait;
use ChapterTrait;
public function handle($id)
{
$chapter = $this->checkChapter($id);
$course = $this->checkCourse($chapter->course_id);
$result = $this->handleBasicInfo($chapter);
$result['course'] = $this->handleCourseInfo($course);
return $result;
}
public function handleBasicInfo(ChapterModel $chapter)
{
$result = [];
switch ($chapter->model) {
case CourseModel::MODEL_VOD:
$result = $this->formatChapterVod($chapter);
break;
case CourseModel::MODEL_LIVE:
$result = $this->formatChapterLive($chapter);
break;
case CourseModel::MODEL_READ:
$result = $this->formatChapterRead($chapter);
break;
}
return $result;
}
public function handleCourseInfo(CourseModel $course)
{
return [
'id' => $course->id,
'title' => $course->title,
'cover' => $course->cover,
];
}
protected function formatChapterVod(ChapterModel $chapter)
{
$chapterVodService = new ChapterVodService();
$playUrls = $chapterVodService->getPlayUrls($chapter->id);
return [
'id' => $chapter->id,
'title' => $chapter->title,
'summary' => $chapter->summary,
'model' => $chapter->model,
'play_urls' => $playUrls,
'user_count' => $chapter->user_count,
'like_count' => $chapter->like_count,
];
}
protected function formatChapterLive(ChapterModel $chapter)
{
$liveService = new LiveService();
$stream = $this->getStreamName($chapter->id);
$playUrls = $liveService->getPullUrls($stream);
$chapterRepo = new ChapterRepo();
$live = $chapterRepo->findChapterLive($chapter->id);
return [
'id' => $chapter->id,
'title' => $chapter->title,
'summary' => $chapter->summary,
'model' => $chapter->model,
'play_urls' => $playUrls,
'start_time' => $live->start_time,
'end_time' => $live->end_time,
'status' => $live->status,
'user_count' => $chapter->user_count,
'like_count' => $chapter->like_count,
];
}
protected function formatChapterRead(ChapterModel $chapter)
{
$chapterRepo = new ChapterRepo();
$read = $chapterRepo->findChapterRead($chapter->id);
return [
'id' => $chapter->id,
'title' => $chapter->title,
'summary' => $chapter->summary,
'model' => $chapter->model,
'content' => $read->content,
'user_count' => $chapter->user_count,
'like_count' => $chapter->like_count,
];
}
}