CourseController.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Course;
  4. use App\Models\CourseMember;
  5. use Illuminate\Http\Request;
  6. use App\Http\Api\AuthApi;
  7. use App\Http\Api\StudioApi;
  8. use App\Http\Resources\CourseResource;
  9. class CourseController extends Controller
  10. {
  11. /**
  12. * Display a listing of the resource.
  13. *
  14. * @return \Illuminate\Http\Response
  15. */
  16. public function index(Request $request)
  17. {
  18. //
  19. $result=false;
  20. $indexCol = ['id','title','subtitle','cover','content','content_type','teacher','start_at','end_at','updated_at','created_at'];
  21. switch ($request->get('view')) {
  22. case 'create':
  23. # 获取 studio 建立的所有 course
  24. $user = AuthApi::current($request);
  25. if(!$user){
  26. return $this->error(__('auth.failed'));
  27. }
  28. //判断当前用户是否有指定的studio的权限
  29. if($user['user_uid'] !== StudioApi::getIdByName($request->get('studio'))){
  30. return $this->error(__('auth.failed'));
  31. }
  32. $table = Course::where('studio_id', $user["user_uid"]);
  33. break;
  34. case 'study':
  35. $user = AuthApi::current($request);
  36. if(!$user){
  37. return $this->error(__('auth.failed'));
  38. }
  39. //我学习的课程
  40. $course = CourseMember::where('user_id',$user["user_uid"])
  41. ->where('role','member')
  42. ->select('course_id')
  43. ->get();
  44. $courseId = [];
  45. foreach ($course as $key => $value) {
  46. # code...
  47. $courseId[] = $value->course_id;
  48. }
  49. $table = Course::whereIn('id', $courseId);
  50. break;
  51. case 'teach':
  52. //我任教的课程
  53. $user = AuthApi::current($request);
  54. if(!$user){
  55. return $this->error(__('auth.failed'));
  56. }
  57. $course = CourseMember::where('user_id',$user["user_uid"])
  58. ->where('role','manager')
  59. ->select('course_id')
  60. ->get();
  61. $courseId = [];
  62. foreach ($course as $key => $value) {
  63. # code...
  64. $courseId[] = $value->course_id;
  65. }
  66. $table = Course::whereIn('id', $courseId);
  67. break;
  68. }
  69. $table = $table->select($indexCol);
  70. if(isset($_GET["search"])){
  71. $table = $table->where('title', 'like', $_GET["search"]."%");
  72. }
  73. $count = $table->count();
  74. if(isset($_GET["order"]) && isset($_GET["dir"])){
  75. $table = $table->orderBy($_GET["order"],$_GET["dir"]);
  76. }else{
  77. if($request->get('view') === 'studio_list'){
  78. $table = $table->orderBy('count','desc');
  79. }else{
  80. $table = $table->orderBy('updated_at','desc');
  81. }
  82. }
  83. if(isset($_GET["limit"])){
  84. $offset = 0;
  85. if(isset($_GET["offset"])){
  86. $offset = $_GET["offset"];
  87. }
  88. $table = $table->skip($offset)->take($_GET["limit"]);
  89. }
  90. $result = $table->get();
  91. if($result){
  92. return $this->ok(["rows"=>CourseResource::collection($result),"count"=>$count]);
  93. }else{
  94. return $this->error("没有查询到数据");
  95. }
  96. }
  97. /**
  98. * Display a listing of the resource.
  99. *
  100. * @return \Illuminate\Http\Response
  101. */
  102. public function showMyCourseNumber(Request $request){
  103. $user = AuthApi::current($request);
  104. if(!$user){
  105. return $this->error(__('auth.failed'));
  106. }
  107. //我建立的课程
  108. $create = Course::where('studio_id', $user["user_uid"])->count();
  109. //我学习的课程
  110. $study = CourseMember::where('user_id',$user["user_uid"])
  111. ->where('role','member')
  112. ->count();
  113. return $this->ok(['create'=>$create,'teach'=>0,'study'=>$study]);
  114. }
  115. /**
  116. * Store a newly created resource in storage.
  117. *
  118. * @param \Illuminate\Http\Request $request
  119. * @return \Illuminate\Http\Response
  120. */
  121. public function store(Request $request)
  122. {
  123. //
  124. $user = AuthApi::current($request);
  125. if(!$user){
  126. return $this->error(__('auth.failed'));
  127. }
  128. //判断当前用户是否有指定的studio的权限
  129. $studio_id = StudioApi::getIdByName($request->get('studio'));
  130. if($user['user_uid'] !== $studio_id){
  131. return $this->error(__('auth.failed'));
  132. }
  133. //查询是否重复
  134. if(Course::where('title',$request->get('title'))->where('studio_id',$user['user_uid'])->exists()){
  135. return $this->error(__('validation.exists',['name']));
  136. }
  137. $course = new Course;
  138. $course->title = $request->get('title');
  139. $course->studio_id = $studio_id;
  140. $course->save();
  141. return $this->ok(new CourseResource($course));
  142. }
  143. /**
  144. * Display the specified resource.
  145. *
  146. * @param \App\Models\Course $course
  147. * @return \Illuminate\Http\Response
  148. */
  149. public function show(Course $course)
  150. {
  151. //
  152. return $this->ok(new CourseResource($course));
  153. }
  154. /**
  155. * Update the specified resource in storage.
  156. *
  157. * @param \Illuminate\Http\Request $request
  158. * @param \App\Models\Course $course
  159. * @return \Illuminate\Http\Response
  160. */
  161. public function update(Request $request, Course $course)
  162. {
  163. //
  164. $user = AuthApi::current($request);
  165. if(!$user){
  166. return $this->error(__('auth.failed'));
  167. }
  168. //判断当前用户是否有指定的studio的权限
  169. if($user['user_uid'] !== $course->studio_id){
  170. return $this->error(__('auth.failed'));
  171. }
  172. //查询标题是否重复
  173. if(Course::where('title',$request->get('title'))->where('studio_id',$user['user_uid'])->exists()){
  174. if($course->title !== $request->get('title')){
  175. return $this->error(__('validation.exists',['name']));
  176. }
  177. }
  178. $course->title = $request->get('title');
  179. $course->subtitle = $request->get('subtitle');
  180. $course->cover = $request->get('cover');
  181. $course->content = $request->get('content');
  182. $course->teacher = $request->get('teacher_id');
  183. $course->start_at = $request->get('start_at');
  184. $course->end_at = $request->get('end_at');
  185. $course->save();
  186. return $this->ok($course);
  187. }
  188. /**
  189. * Remove the specified resource from storage.
  190. *
  191. * @param \App\Models\Course $course
  192. * @return \Illuminate\Http\Response
  193. */
  194. public function destroy(Course $course)
  195. {
  196. //
  197. $user = AuthApi::current($request);
  198. if(!$user){
  199. return $this->error(__('auth.failed'));
  200. }
  201. //判断当前用户是否有指定的studio的权限
  202. if($user['user_uid'] !== StudioApi::getIdByName($request->get('studio'))){
  203. return $this->error(__('auth.failed'));
  204. }
  205. $delete = 0;
  206. DB::transaction(function() use($delete){
  207. //删除group member
  208. $memberDelete = CourseMember::where('course_id',$course->id)->delete();
  209. $delete = $course->delete();
  210. });
  211. $this->ok($delete);
  212. }
  213. }