service = $service; } /** * 列表 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Prettus\Repository\Exceptions\RepositoryException */ public function index(Request $request) { $this->validate($request, ['course_id' => 'required|integer']); $data = $this->service->handleList($request); return $this->response->success($data); } /** * 新增 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function store(Request $request) { $data = $this->validateData($request, [ 'course_id' => 'required|integer', 'course_chapter_id' => 'required|integer', 'title' => 'required', 'url' => 'required', // 'short_description' => 'required', 'description' => 'required', 'published_at' => 'sometimes|date', 'duration' => 'required|integer', 'subtitle_zh_path' => 'sometimes|integer', 'settings.ban_drag' => 'sometimes|integer', 'sort' => 'required|integer', 'status' => 'required|integer', ], [ 'course_id' => '课程id', 'course_chapter_id' => '章节 id', 'category_id' => '课程分类', 'title' => '名称', 'url' => '播放地址', 'duration' => '时长', // 'short_description' => '简介', 'description' => '介绍', 'published_at' => '发布时间', 'subtitle_zh_path' => '中文字幕', 'settings.ban_drag' => '是否禁止拖动', 'sort' => '排序', 'status' => '状态', ]); $data['admin_id'] = login_admin_id(); $data['slug'] = Str::random(); $model = $this->service->handleStore($data); return $this->response->created($model, '创建成功'); } /** * 详情 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function show(Request $request) { $this->validate($request, ['id' => 'required|integer']); $model = $this->service->handleProfile($request->get('id')); return $this->response->success($model); } /** * 编辑 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function update(Request $request) { $data = $this->validateData($request, [ 'id' => 'required|integer', // 'course_id' => 'required|integer', 'course_chapter_id' => 'required|integer', 'title' => 'required', 'url' => 'required', // 'short_description' => 'required', 'description' => 'required', 'published_at' => 'sometimes|date', 'duration' => 'required|integer', 'subtitle_zh_path' => 'sometimes|integer', 'settings.ban_drag' => 'sometimes|integer', 'sort' => 'required|integer', 'status' => 'required|integer', ], [ 'course_id' => '课程id', 'course_chapter_id' => '章节 id', 'category_id' => '课程分类', 'title' => '名称', 'url' => '播放地址', 'duration' => '时长', 'short_description' => '简介', 'description' => '介绍', 'published_at' => '发布时间', 'subtitle_zh_path' => '中文字幕', 'settings.ban_drag' => '是否禁止拖动', 'sort' => '排序', 'status' => '状态', ]); $model = $this->service->handleUpdate($data); return $this->response->success($model, '创建成功'); } /** * 删除 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function destroy(Request $request) { $this->validate($request, ['id' => 'required|integer']); $re = $this->service->handleDelete($request->get('id')); if ($re) { return $this->response->ok('删除成功'); } return $this->response->fail('删除失败'); } /** * 批量删除 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function batchDelete(Request $request) { $ids = $this->validateData($request, ['ids' => 'required|array']); $re = $this->service->handleBatchDelete($ids); if ($re) { return $this->response->ok('删除成功'); } return $this->response->fail('删除失败'); } /** * 选项 * @must * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource * @throws \Prettus\Repository\Exceptions\RepositoryException */ public function selectOptions(Request $request) { $lists = $this->service->handleSelectOptions($request); return $this->response->success($lists); } // /** // * 视频详情(用户) // * @param $id // * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource // * Author: Mead // */ // public function viewShow($id) // { // $video = $this->repository->where('status', ModelStatusEnum::OK)->where('published_at', '<', Carbon::now())->find($id); // // $comments = $video->comments()->with(['user'])->limit(self::PAGE_NUM)->orderByDesc('id')->get(); // // $attaches = $video->attaches()->with(['path_resource'])->where('status', ModelStatusEnum::OK)->get(['name', 'id', 'path', 'download_times']); // // $video->view_num++; // $video->save(); // // $user_video_watch_record = UserVideoWatchRecord::query()->firstOrCreate([ // 'video_id' => $video->id, // 'user_id' => login_admin_id() // ], [ // 'course_id' => $video->course_id, // 'watch_seconds' => 0, // 'is_watched' => VideoWatchEnum::NO, // 'progress' => 0 // ]); // // $video = $this->repository->parserResult($video); // // return Response::success(compact('video', 'comments', 'attaches', 'user_video_watch_record')); // } // // public function lookRecord(Request $request) // { // $this->validate($request, [ // 'course_id' => 'required', // 'video_id' => 'required', // 'watch_seconds' => 'required', // 'is_watched' => 'required', // ]); // // $course_id = $request->get('course_id'); // $video_id = $request->get('video_id'); // $watch_seconds = $request->get('watch_seconds', 10); // $is_watched = $request->get('is_watched', VideoWatchEnum::NO); // // $total_seconds = Video::query()->where('id', $video_id)->value('duration'); // // $progress = 0; // if ($total_seconds > 0) { // $progress = bcdiv($watch_seconds, $total_seconds, 2) * 100; // } // // if ($progress >= 98) { // $is_watched = VideoWatchEnum::OK; // } // // UserVideoWatchRecord::query()->where('video_id', $video_id)->where('user_id', login_admin_id())->update([ // 'is_watched' => $is_watched, // 'watch_seconds' => $watch_seconds, // 'watched_at' => Carbon::now(), // 'progress' => $progress // ]); // // if ($is_watched == VideoWatchEnum::OK) { // $video_over_nums = UserVideoWatchRecord::query()->where('course_id', $course_id)->where('is_watched', VideoWatchEnum::OK)->count(); // $video_total_nums = Video::query()->where('course_id', $course_id)->count(); // $course_progress = bcdiv($video_over_nums, $video_total_nums, 2) * 100; // $course_over_status = VideoWatchEnum::NO; // if ($course_progress >= 98) { // $course_over_status = VideoWatchEnum::OK; // } // UserRecord::query()->where('course_id', $course_id)->where('user_id', login_admin_id())->update(['progress' => $course_progress, 'is_watched' => $course_over_status, 'watched_at' => Carbon::now()]); // } // // return Response::success(null); // } }