repository = $repository; $this->validator = $validator; } /** * 课程列表 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function index(Request $request) { $this->repository->pushCriteria(CourseCriteria::class); $courses = $this->repository->paginate($request->get('per_page', self::PAGE_NUM)); // $courses = $this->repository->parserResult($courses); return Response::success($courses); } /** * 添加课程 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function store(Request $request) { $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE)); try { $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE))); $data['type'] = CourseTypeEnum::RECORDED; $data['user_id'] = login_user_id(); $data['slug'] = Str::random(); if (!in_array('published_at', $data) || empty($data['published_at'])) { $data['published_at'] = Carbon::now(); } $course = $this->repository->create($data); return Response::success($course); } catch (\Exception $e) { return $this->errorStore($e); } } /** * 修改课程 * @param Request $request * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function update(Request $request, $id) { $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_UPDATE)); if (!Course::query()->where('user_id', login_user_id())->where('id', $id)->exists()) { return $this->error('您暂无编辑权限!'); } try { $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_UPDATE))); if (!in_array('published_at', $data) || empty($data['published_at'])) { $data['published_at'] = Carbon::now(); } $course = $this->repository->update($data, $id); return Response::success($course); } catch (\Exception $e) { $this->errorStore($e); } } /** * 删除课程 * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function destroy($id) { if (!Course::query()->where('user_id', login_user_id())->where('id', $id)->exists()) { return $this->error('您暂无删除权限!'); } try { $this->repository->delete($id); return Response::success(null, T('successfully delete.')); } catch (\Exception $exception) { return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR); } } /** * 课程详情 * Author: Mead */ public function show($slug) { $courseVideo = $this->repository->where('slug', $slug)->first(); if (!$courseVideo) { return $this->error('找不到资源'); } $courseVideo = $this->repository->parserResult($courseVideo); return Response::success($courseVideo); } /** * 课程详情【学生】 * @param Request $request * @param $slug * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function detail(Request $request, $slug) { // $id = $request->get('id'); $course = $this->repository->where('slug', $slug)->first(); if (!$course) { return Response::fail(T('not find Model')); } $directory = []; $data = Chapter::query()->where('course_id', $course->id)->where('status', ModelStatusEnum::OK)->orderByDesc('sort')->get(); foreach ($data as $d) { $directory[] = [ 'id' => $d['id'], 'title' => $d['title'], 'children' => $d->videos()->where('status', ModelStatusEnum::OK)->where('published_at', '<', Carbon::now())->orderByDesc('sort')->get(['id', 'title', 'duration', 'slug'])->append(['duration_text', "progress"]) ]; } $comments = []; // $comments = $course->comments()->with(['user'])->limit(self::PAGE_NUM)->orderByDesc('id')->get(); $attaches = $course->attaches()->with(['path_resource'])->where('status', ModelStatusEnum::OK)->get(['name', 'id', 'path', 'download_times']); $subscribe = []; // $subscribe = $course->subscribe()->where('user_id', login_user_id())->first(); $course = $this->repository->parserResult($course); $watch_record_video_id = []; // $watch_record_video_id = UserVideoWatchRecord::query()->where('user_id', login_user_id())->where('course_id', $id)->orderByDesc('watched_at')->value('video_id'); return Response::success(compact('course', 'directory', 'comments', 'attaches', 'subscribe', 'watch_record_video_id')); } /** * 订阅课程 * @param Request $request * Author: Mead */ public function subscribe(Request $request) { $this->validate($request, ['course_id' => 'required|integer']); $course_id = $request->get('course_id'); $user_id = login_user_id(); if (UserRecord::query()->where('course_id', $course_id)->where('user_id', $user_id)->exists()) { return Response::success(null); } UserRecord::query()->create(['course_id' => $course_id, 'user_id' => $user_id]); Course::query()->where('id', $course_id)->increment('user_count'); return Response::success(null); } /** * 观看记录 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function lookCourses(Request $request) { $user_id = login_user_id(); $courses = Course::query()->select('c.*')->from('course_courses as c')->withoutGlobalScope('language')->withTrashed()->where('r.user_id', $user_id) ->leftJoin('course_user_records as r', 'r.course_id', '=', 'c.id')->where('status', ModelStatusEnum::OK)->where('c.deleted_at', '=', null)->where('r.deleted_at', '=', null)->orderByDesc('r.updated_at')->paginate($request->get('per_page', self::PAGE_NUM)); $courses = $this->repository->parserResult($courses); return Response::success($courses); } /** * 选项 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function selectOptions(Request $request) { $lists = $this->repository->select(['id', 'title'])->paginate($request->get('per_page', self::PAGE_NUM)); return Response::success($lists); } /** * 收藏课程 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function collection(Request $request) { $this->validate($request, ['course_id' => 'required|integer']); $course_id = $request->get('course_id'); $user_id = login_user_id(); $is_collection = Collection::query()->where('course_id', $course_id)->where('user_id', $user_id)->exists(); if ($is_collection) { Collection::query()->where('course_id', $course_id)->where('user_id', $user_id)->delete(); return Response::success(null, '取消收藏成功'); } Collection::query()->create([ 'course_id' => $course_id, 'user_id' => $user_id, ]); return Response::success(null, '收藏成功'); } /** * 随机课程 * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function random() { $courses = Course::query()->where('status', ModelStatusEnum::OK)->where('published_at', '<', Carbon::now())->inRandomOrder()->take(5)->get(); $courses = $this->repository->parserResult($courses); return Response::success($courses); } }