1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-22 19:44:02 +08:00
2023-12-06 20:24:09 +08:00

161 lines
3.8 KiB
PHP

<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Http\Home\Services;
use App\Models\Category as CategoryModel;
use App\Models\Question as QuestionModel;
use App\Services\Category as CategoryService;
use App\Validators\QuestionQuery as QuestionQueryValidator;
class QuestionQuery extends Service
{
protected $baseUrl;
public function __construct()
{
$this->baseUrl = $this->url->get(['for' => 'home.question.list']);
}
public function handleTopCategories()
{
$params = $this->getParams();
if (isset($params['tc'])) {
unset($params['tc']);
}
if (isset($params['sc'])) {
unset($params['sc']);
}
$defaultItem = [
'id' => 'all',
'name' => '全部',
'url' => $this->baseUrl . $this->buildParams($params),
];
$result = [];
$result[] = $defaultItem;
$categoryService = new CategoryService();
$topCategories = $categoryService->getChildCategories(CategoryModel::TYPE_QUESTION, 0);
foreach ($topCategories as $category) {
$params['tc'] = $category['id'];
$result[] = [
'id' => $category['id'],
'name' => $category['name'],
'url' => $this->baseUrl . $this->buildParams($params),
];
}
return $result;
}
public function handleSubCategories()
{
$params = $this->getParams();
if (empty($params['tc'])) {
return [];
}
$categoryService = new CategoryService();
$subCategories = $categoryService->getChildCategories(CategoryModel::TYPE_QUESTION, $params['tc']);
if (empty($subCategories)) {
return [];
}
if (isset($params['sc'])) {
unset($params['sc']);
}
$defaultItem = [
'id' => 'all',
'name' => '全部',
'url' => $this->baseUrl . $this->buildParams($params),
];
$result = [];
$result[] = $defaultItem;
foreach ($subCategories as $category) {
$params['sc'] = $category['id'];
$result[] = [
'id' => $category['id'],
'name' => $category['name'],
'url' => $this->baseUrl . $this->buildParams($params),
];
}
return $result;
}
public function handleSorts()
{
$params = $this->getParams();
$result = [];
$sorts = QuestionModel::sortTypes();
foreach ($sorts as $key => $value) {
$params['sort'] = $key;
$result[] = [
'id' => $key,
'name' => $value,
'url' => $this->baseUrl . $this->buildParams($params),
];
}
return $result;
}
public function getParams()
{
$query = $this->request->getQuery();
$params = [];
$validator = new QuestionQueryValidator();
if (isset($query['tag_id'])) {
$tag = $validator->checkTag($query['tag_id']);
$params['tag_id'] = $tag->id;
}
if (isset($query['tc']) && $query['tc'] != 'all') {
$category = $validator->checkCategory($query['tc']);
$params['tc'] = $category->id;
}
if (isset($query['sc']) && $query['sc'] != 'all') {
$category = $validator->checkCategory($query['sc']);
$params['sc'] = $category->id;
}
if (isset($query['sort'])) {
$params['sort'] = $validator->checkSort($query['sort']);;
}
return $params;
}
protected function buildParams($params)
{
return $params ? '?' . http_build_query($params) : '';
}
}