AttachController.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. namespace App\Http\Controllers\Admin\Course;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Models\Base\Resource;
  5. use App\Repositories\Models\Course\Attach;
  6. use App\Services\Course\AttachService;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Storage;
  9. /**
  10. * 附件管理
  11. *
  12. * @package namespace App\Http\Controllers;
  13. */
  14. class AttachController extends Controller
  15. {
  16. protected $service;
  17. public function __construct(AttachService $service)
  18. {
  19. parent::__construct();
  20. $this->service = $service;
  21. }
  22. /**
  23. * 列表
  24. * @param Request $request
  25. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  26. * @throws \Prettus\Repository\Exceptions\RepositoryException
  27. */
  28. public function index(Request $request)
  29. {
  30. $data = $this->service->handleAll($request);
  31. return $this->response->success($data);
  32. }
  33. /**
  34. * 新增
  35. * @param Request $request
  36. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  37. * @throws \Illuminate\Validation\ValidationException
  38. * @throws \Prettus\Validator\Exceptions\ValidatorException
  39. */
  40. public function store(Request $request)
  41. {
  42. $data = $this->validateData($request, [
  43. 'course_id' => 'required|integer',
  44. 'course_video_id' => 'required|integer',
  45. 'name' => 'required',
  46. 'path' => 'required|integer',
  47. 'sort' => 'required|integer',
  48. 'status' => 'required|integer'
  49. ], [
  50. 'course_id' => '课程id',
  51. 'course_video_id' => '视频 id',
  52. 'name' => '名称',
  53. 'path' => '文件路径',
  54. 'sort' => '排序',
  55. 'status' => '状态',
  56. ]);
  57. $model = $this->service->handleStore($data);
  58. return $this->response->created($model, '创建成功');
  59. }
  60. /**
  61. * 详情
  62. * @param Request $request
  63. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  64. * @throws \Illuminate\Validation\ValidationException
  65. */
  66. public function show(Request $request)
  67. {
  68. $this->validate($request, ['id' => 'required|integer']);
  69. $model = $this->service->handleProfile($request->get('id'));
  70. return $this->response->success($model);
  71. }
  72. /**
  73. * 编辑
  74. * @param Request $request
  75. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  76. * @throws \Illuminate\Validation\ValidationException
  77. * @throws \Prettus\Validator\Exceptions\ValidatorException
  78. */
  79. public function update(Request $request)
  80. {
  81. $data = $this->validateData($request, [
  82. 'id' => 'required|integer',
  83. // 'course_id' => 'required|integer',
  84. 'course_video_id' => 'required|integer',
  85. 'name' => 'required',
  86. 'path' => 'required|integer',
  87. 'sort' => 'required|integer',
  88. 'status' => 'required|integer'
  89. ], [
  90. 'course_id' => '课程id',
  91. 'course_video_id' => '视频 id',
  92. 'name' => '名称',
  93. 'path' => '文件路径',
  94. 'sort' => '排序',
  95. 'status' => '状态',
  96. ]);
  97. $model = $this->service->handleUpdate($data);
  98. return $this->response->success($model, '创建成功');
  99. }
  100. /**
  101. * 删除
  102. * @param Request $request
  103. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  104. * @throws \Illuminate\Validation\ValidationException
  105. * @throws \Prettus\Validator\Exceptions\ValidatorException
  106. */
  107. public function destroy(Request $request)
  108. {
  109. $this->validate($request, ['id' => 'required|integer']);
  110. $re = $this->service->handleDelete($request->get('id'));
  111. if ($re) {
  112. return $this->response->ok('删除成功');
  113. }
  114. return $this->response->fail('删除失败');
  115. }
  116. /**
  117. * 批量删除
  118. * @param Request $request
  119. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  120. * @throws \Illuminate\Validation\ValidationException
  121. * @throws \Prettus\Validator\Exceptions\ValidatorException
  122. */
  123. public function batchDelete(Request $request)
  124. {
  125. $ids = $this->validateData($request, ['ids' => 'required|array']);
  126. $re = $this->service->handleBatchDelete($ids);
  127. if ($re) {
  128. return $this->response->ok('删除成功');
  129. }
  130. return $this->response->fail('删除失败');
  131. }
  132. /**
  133. * 选项
  134. * @must
  135. * @param Request $request
  136. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  137. * @throws \Prettus\Repository\Exceptions\RepositoryException
  138. */
  139. public function selectOptions(Request $request)
  140. {
  141. $lists = $this->service->handleSelectOptions($request);
  142. return $this->response->success($lists);
  143. }
  144. /**
  145. * 下载
  146. * @param $id
  147. * @return \Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse
  148. */
  149. public function download(Request $request)
  150. {
  151. $data = $this->validateData($request, ['course_id' => 'required|integer', 'id' => 'required|integer']);
  152. $attach = Attach::query()->where('course_id', $data['course_id'])->where('id', '=', (int)$data['id'])->first();
  153. if ($attach) {
  154. $attach->download_times++;
  155. $attach->save();
  156. $resource = Resource::query()->find($attach->path);
  157. return response()->download(Storage::disk($resource->disk)->path($resource->path), $resource->name, [
  158. 'Access-Control-Allow-Origin' => '*',
  159. 'Access-Control-Allow-Methods' => '*',
  160. 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With',
  161. 'Access-Control-Expose-Headers' => 'Content-Disposition',
  162. 'Content-type' => 'application/octet-stream',
  163. 'Content-Disposition' => 'attachment; filename=' . $resource->name,
  164. ]);
  165. }
  166. return $this->errorFail();
  167. }
  168. }