You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
7.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Requests\StudyAskRequest;
use App\Models\StudyAsk;
use App\Models\Study;
use App\Helpers\ResponseCode;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
/**
* @OA\Tag(
* name="学习题目管理",
* description="学习题目相关接口"
* )
*/
class StudyAskController extends BaseController
{
public function __construct()
{
parent::__construct(new StudyAsk());
}
/**
* @OA\Get(
* path="/api/admin/study-asks/index",
* tags={"学习题目管理"},
* summary="学习题目列表",
* description="获取学习题目列表",
* @OA\Parameter(name="is_export", in="query", @OA\Schema(type="string"), required=false, description="是否导出0否1是"),
* @OA\Parameter(name="export_fields", in="query", @OA\Schema(type="string"), required=false, description="需要导出的字段数组"),
* @OA\Parameter(name="filter", in="query", @OA\Schema(type="string"), required=false, description="查询条件。数组"),
* @OA\Parameter(name="show_relation", in="query", @OA\Schema(type="string"), required=false, description="需要输出的关联关系数组,填写输出指定数据"),
* @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"),
* @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"),
* @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"),
* @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="成功获取学习题目列表"
* )
* )
*/
public function index()
{
$all = request()->all();
$filter = $all['filter'] ?? [];
$show_relation = $all['show_relation'] ?? [];
$page_size = $all['page_size'] ?? 10;
$page = $all['page'] ?? 1;
$sort_name = $all['sort_name'] ?? 'id';
$sort_type = $all['sort_type'] ?? 'desc';
$query = $this->model->query();
// 应用过滤条件
if (!empty($filter)) {
$query = $this->applyFilters($query, $filter);
}
// 应用排序
$query->orderBy($sort_name, $sort_type);
// 加载关联关系
if (!empty($show_relation)) {
$query->with($show_relation);
}
// 分页
$result = $query->paginate($page_size, ['*'], 'page', $page);
return $this->success($result);
}
/**
* @OA\Get(
* path="/api/admin/study-asks/show",
* tags={"学习题目管理"},
* summary="学习题目详情",
* description="获取指定的学习题目详情",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="学习题目ID"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="成功获取学习题目详情"
* )
* )
*/
public function show()
{
$all = request()->all();
$detail = $this->model->with(['study'])->find($all['id']);
return $this->success($detail);
}
/**
* @OA\Post(
* path="/api/admin/study-asks/save",
* tags={"学习题目管理"},
* summary="新增/更新学习题目",
* description="创建或更新学习题目",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=false, description="学习题目ID更新时必填"),
* @OA\Parameter(name="study_id", in="query", @OA\Schema(type="string"), required=true, description="学习内容ID"),
* @OA\Parameter(name="question", in="query", @OA\Schema(type="string"), required=true, description="题目"),
* @OA\Parameter(name="type", in="query", @OA\Schema(type="string"), required=true, description="题目类型"),
* @OA\Parameter(name="options", in="query", @OA\Schema(type="string"), required=false, description="选项"),
* @OA\Parameter(name="answer", in="query", @OA\Schema(type="string"), required=true, description="答案"),
* @OA\Parameter(name="score", in="query", @OA\Schema(type="string"), required=false, description="分值"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="成功保存学习题目"
* )
* )
*/
public function save()
{
$formRequest = app(StudyAskRequest::class);
DB::beginTransaction();
try {
$all = request()->all();
$validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []);
if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
$data = $validator->validated();
if (isset($all['id'])) {
// 更新
$studyAsk = $this->model->find($all['id']);
if (!$studyAsk) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('study_ask.not_found')]);
}
$studyAsk->update($data);
$message = __('study_ask.updated_successfully');
} else {
// 新增
$studyAsk = $this->model->create($data);
$message = __('study_ask.created_successfully');
}
DB::commit();
return $this->success($studyAsk);
} catch (\Exception $exception) {
DB::rollBack();
return $this->fail([$exception->getCode(), $exception->getMessage()]);
}
}
/**
* @OA\Get(
* path="/api/admin/study-asks/destroy",
* tags={"学习题目管理"},
* summary="删除学习题目",
* description="删除指定的学习题目",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="学习题目ID"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="成功删除学习题目"
* )
* )
*/
public function destroy()
{
$all = request()->all();
$studyAsk = $this->model->find($all['id']);
if (!$studyAsk) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('study_ask.not_found')]);
}
DB::beginTransaction();
try {
$studyAsk->delete();
DB::commit();
return $this->success(__('study_ask.deleted_successfully'));
} catch (\Exception $exception) {
DB::rollBack();
return $this->fail([$exception->getCode(), $exception->getMessage()]);
}
}
/**
* 应用过滤条件
*/
private function applyFilters($query, $filter)
{
foreach ($filter as $key => $value) {
if (is_array($value)) {
$query->whereIn($key, $value);
} else {
$query->where($key, $value);
}
}
return $query;
}
}