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.

234 lines
9.1 KiB

11 months ago
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Requests\StudyRequest;
use App\Models\Study;
use App\Models\StudyAsk;
use App\Helpers\ResponseCode;
11 months ago
use App\Models\StudyLog;
11 months ago
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
11 months ago
use Illuminate\Support\Facades\Validator;
11 months ago
/**
* @OA\Tag(
* name="学习内容管理",
* description="学习内容相关接口"
* )
*/
class StudyController extends BaseController
{
public function __construct()
{
parent::__construct(new Study());
}
11 months ago
/**
* @OA\Get(
* path="/api/admin/studies/study-log",
* tags={"学习内容管理"},
* summary="学习记录",
* description="",
* @OA\Parameter(name="keyword", 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 studyLog()
{
$all = request()->all();
$list = StudyLog::with('user')->where(function ($query) use ($all) {
if (isset($all['keyword'])) {
$query->where('content', 'like', '%' . $all['keyword'] . '%');
}
})->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc')
->paginate($all['page_size'] ?? 20);
return $this->success($list);
}
11 months ago
/**
* @OA\Get(
* path="/api/admin/studies/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/studies/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(['studyAsks'])->find($all['id']);
return $this->success($detail);
}
/**
* @OA\Post(
* path="/api/admin/studies/save",
* tags={"学习内容管理"},
* summary="新增/更新学习内容",
* description="创建或更新学习内容",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=false, description="学习内容ID更新时必填"),
* @OA\Parameter(name="title", 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="content", in="query", @OA\Schema(type="string"), required=false, description="内容"),
* @OA\Parameter(name="file", in="query", @OA\Schema(type="string"), required=false, description="文件"),
* @OA\Parameter(name="duration", in="query", @OA\Schema(type="string"), required=false, description="时长"),
* @OA\Parameter(name="is_required", 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()
{
11 months ago
$formRequest = app(StudyRequest::class);
11 months ago
DB::beginTransaction();
try {
$all = request()->all();
11 months ago
$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();
11 months ago
if (isset($all['id'])) {
// 更新
$study = $this->model->find($all['id']);
if (!$study) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('study.not_found')]);
}
$study->update($data);
$message = __('study.updated_successfully');
} else {
// 新增
$study = $this->model->create($data);
$message = __('study.created_successfully');
}
DB::commit();
return $this->success($study);
} catch (\Exception $exception) {
DB::rollBack();
return $this->fail([$exception->getCode(), $exception->getMessage()]);
}
}
/**
* @OA\Get(
* path="/api/admin/studies/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();
$study = $this->model->find($all['id']);
if (!$study) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('study.not_found')]);
}
DB::beginTransaction();
try {
$study->delete();
DB::commit();
return $this->success(__('study.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;
}
11 months ago
}