1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-06 00:41:09 +08:00
2019-12-18 16:01:17 +08:00

97 lines
2.1 KiB
PHP

<?php
namespace App\Http\Home\Services;
use App\Library\Paginator\Query as PagerQuery;
use App\Models\Category as CategoryModel;
use App\Models\Course as CourseModel;
use App\Repos\Category as CategoryRepo;
use App\Repos\Course as CourseRepo;
use App\Transformers\CourseList as CourseListTransformer;
use App\Validators\Course as CourseFilter;
class Category extends Service
{
public function getCategory($id)
{
$category = $this->findOrFail($id);
return $category;
}
public function getChilds($id)
{
$categoryRepo = new CategoryRepo();
$childs = $categoryRepo->find([
'parent_id' => $id,
'status' => CategoryModel::STATUS_NORMAL,
]);
return $childs;
}
public function getCourses($id)
{
$category = $this->findOrFail($id);
$pagerQuery = new PagerQuery();
$params = $pagerQuery->getParams();
$sort = $pagerQuery->getSort();
$page = $pagerQuery->getPage();
$limit = $pagerQuery->getLimit();
$filter = new CourseFilter();
$where = [];
$where['category_id'] = $category->id;
if (!empty($params['model'])) {
$where['model'] = $filter->checkModel($params['model']);
}
if (!empty($params['level'])) {
$where['level'] = $filter->checkLevel($params['level']);
}
$where['status'] = CourseModel::STATUS_PUBLISHED;
$courseRepo = new CourseRepo();
$pager = $courseRepo->paginate($where, $sort, $page, $limit);
return $this->handleCourses($pager);
}
private function findOrFail($id)
{
$repo = new CategoryRepo();
$result = $repo->findOrFail($id);
return $result;
}
private function handleCourses($pager)
{
if ($pager->total_items > 0) {
$builder = new CourseListTransformer();
$pipeA = $pager->items->toArray();
$pipeB = $builder->handleUsers($pipeA);
$pipeC = $builder->arrayToObject($pipeB);
$pager->items = $pipeC;
}
return $pager;
}
}