CircleController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/6/5
  6. * Time: 15:58
  7. */
  8. namespace App\Http\Controllers\Circle;
  9. use App\Repositories\Circle\CircleArticleRepository;
  10. use App\Repositories\Circle\CircleRepository;
  11. use App\Transformers\Circle\DetailTransformer;
  12. use App\Transformers\Circle\InterestCirclePictureTransformer;
  13. use App\Transformers\Circle\InterestCircleTransformer;
  14. use Carbon\Carbon;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Support\Facades\Validator;
  17. use App\Http\Controllers\Controller;
  18. use Illuminate\Validation\Rule;
  19. use League\Fractal\Manager;
  20. use League\Fractal\Pagination\IlluminatePaginatorAdapter;
  21. use League\Fractal\Resource\Collection;
  22. use League\Fractal\Resource\Item;
  23. class CircleController extends Controller
  24. {
  25. public function __construct(CircleRepository $circleRepository, CircleArticleRepository $circleArticleRepository)
  26. {
  27. $this->circleRepository = $circleRepository;
  28. $this->circleArticleRepository = $circleArticleRepository;
  29. }
  30. /**
  31. * 创建圈子
  32. */
  33. public function create(Request $request)
  34. {
  35. $validator = Validator::make($request->all(), [
  36. 'name' => 'required|max:12',
  37. 'image' => 'required|url',
  38. 'notice' => 'nullable|string|max:44',
  39. 'join_limit' => ['required', Rule::in(0, 1)],
  40. 'limit_condition' => 'required_if:join_limit,1|integer',
  41. ]);
  42. if ($validator->fails()) {
  43. return $this->response->error($validator->errors()->first(), 500);
  44. }
  45. return $this->circleRepository->create($request->all());
  46. }
  47. /**
  48. * 修改圈子
  49. */
  50. public function update(Request $request)
  51. {
  52. $validator = Validator::make($request->all(), [
  53. 'id' => 'required|exists:interest_circles',
  54. 'name' => 'required|max:12',
  55. 'image' => 'required|url',
  56. 'notice' => 'nullable|string|max:44',
  57. 'join_limit' => ['required', Rule::in(0, 1)],
  58. 'limit_condition' => 'required_if:join_limit,1|integer',
  59. ]);
  60. if ($validator->fails()) {
  61. return $this->response->error($validator->errors()->first(), 500);
  62. }
  63. return $this->circleRepository->update($request->all());
  64. }
  65. /**
  66. * 圈子列表
  67. */
  68. public function index(Request $request)
  69. {
  70. $circleList = $this->circleRepository->circleLists($request->all());
  71. $fractal = new Manager();
  72. $resource = new Collection($circleList, new InterestCircleTransformer());
  73. $resource->setPaginator(new IlluminatePaginatorAdapter($circleList));
  74. $data = $fractal->createData($resource)->toArray();
  75. $data['extra'] = [
  76. 'filters' => [
  77. 'keyword',
  78. 'is_open'
  79. ],
  80. 'columns' => [
  81. 'id',
  82. 'name',
  83. 'image',
  84. 'created_at',
  85. 'article_count',
  86. 'message_count',
  87. 'view_count',
  88. 'join_count',
  89. 'is_recommend',
  90. 'is_open',
  91. ]
  92. ];
  93. return $data;
  94. }
  95. /**
  96. * 圈子详情
  97. */
  98. public function detail(Request $request)
  99. {
  100. $validator = Validator::make($request->all(), [
  101. 'id' => 'required|exists:interest_circles'
  102. ]);
  103. if ($validator->fails()) {
  104. return $this->response->error($validator->errors()->first(), 500);
  105. }
  106. $circle = $this->circleRepository->detail($request->all());
  107. return $this->response->item($circle, new DetailTransformer());
  108. }
  109. /**
  110. * 圈子 推荐
  111. */
  112. public function recommend(Request $request)
  113. {
  114. $validator = Validator::make($request->all(), [
  115. 'id' => 'required|exists:interest_circles'
  116. ]);
  117. if ($validator->fails()) {
  118. return $this->response->error($validator->errors()->first(), 500);
  119. }
  120. return $this->circleRepository->circleRecommend($request->all());
  121. }
  122. /**
  123. * 圈子 开启/关闭
  124. */
  125. public function circleStatus(Request $request)
  126. {
  127. $validator = Validator::make($request->all(), [
  128. 'id' => 'required|exists:interest_circles'
  129. ]);
  130. if ($validator->fails()) {
  131. return $this->response->error($validator->errors()->first(), 500);
  132. }
  133. return $this->circleRepository->circleStatus($request->all());
  134. }
  135. /**
  136. * 相册列表
  137. */
  138. public function pictureList(Request $request)
  139. {
  140. $pictureList = $this->circleRepository->pictureLists($request->all());
  141. $fractal = new Manager();
  142. $resource = new Collection($pictureList, new InterestCirclePictureTransformer());
  143. $resource->setPaginator(new IlluminatePaginatorAdapter($pictureList));
  144. $data = $fractal->createData($resource)->toArray();
  145. return $data;
  146. }
  147. /**
  148. * 删除相册图片
  149. */
  150. public function deletePicture(Request $request)
  151. {
  152. $validator = Validator::make($request->all(), [
  153. 'id' => 'required|exists:interest_circle_pictures'
  154. ]);
  155. if ($validator->fails()) {
  156. return $this->response->error($validator->errors()->first(), 500);
  157. }
  158. return $this->circleRepository->deletePicture($request->all());
  159. }
  160. /**
  161. * 圈子精品文章列表
  162. */
  163. public function articleList(Request $request)
  164. {
  165. $articleList = $this->circleArticleRepository->lists($request->all());
  166. $fractal = new Manager();
  167. $resource = new Collection($articleList, new InterestCircleTransformer());
  168. $resource->setPaginator(new IlluminatePaginatorAdapter($articleList));
  169. $data = $fractal->createData($resource)->toArray();
  170. $data['extra'] = [
  171. 'filters' => [
  172. ],
  173. 'columns' => [
  174. 'id',
  175. 'created_at',
  176. 'uid',
  177. 'topic',
  178. 'content',
  179. 'pv',
  180. 'praise_count',
  181. 'share_count',
  182. 'comment_count',
  183. 'collect_count',
  184. 'is_recommend',
  185. ]
  186. ];
  187. return $data;
  188. }
  189. /**
  190. * 评论列表
  191. */
  192. public function commentList(Request $request)
  193. {
  194. $commentList = $this->postRepository->commentList($request->all());
  195. $fractal = new Manager();
  196. $resource = new Collection($commentList, new CommentTransformer());
  197. $resource->setPaginator(new IlluminatePaginatorAdapter($commentList));
  198. $data = $fractal->createData($resource)->toArray();
  199. $data['extra'] = [
  200. 'filters' => [
  201. ],
  202. 'columns' => [
  203. 'id',
  204. 'post_id',
  205. 'parent_id',
  206. 'uid',
  207. 'content',
  208. 'like_count',
  209. 'created_at',
  210. 'is_delete',
  211. ]
  212. ];
  213. return $data;
  214. }
  215. /**
  216. * 评论&回复
  217. */
  218. public function comment(Request $request)
  219. {
  220. $validator = Validator::make($request->all(), [
  221. 'post_id' => 'required|integer',
  222. 'uid' => 'required|integer',
  223. 'content' => 'required|string|max:150',
  224. ]);
  225. if ($validator->fails()) {
  226. return $this->response->error($validator->errors()->first(), 500);
  227. }
  228. return $this->postRepository->comment($request->all());
  229. }
  230. /**
  231. * 增加数据
  232. */
  233. public function addData(Request $request)
  234. {
  235. $validator = Validator::make($request->all(), [
  236. 'post_id' => 'required|exists:post,id',
  237. 'add_pv' => 'required|integer|min:0',
  238. 'add_praise_count' => 'required|integer|min:0',
  239. 'add_collect_count' => 'required|integer|min:0',
  240. 'add_share_count' => 'required|integer|min:0',
  241. ]);
  242. if ($validator->fails()) {
  243. return $this->response->error($validator->errors()->first(), 500);
  244. }
  245. return $this->postRepository->addData($request->all());
  246. }
  247. /**
  248. * 推荐内容
  249. */
  250. public function suggest(Request $request)
  251. {
  252. $validator = Validator::make($request->all(), [
  253. 'id' => 'required|integer',
  254. ]);
  255. if ($validator->fails()) {
  256. return $this->response->error($validator->errors()->first(), 500);
  257. }
  258. return $this->postRepository->suggest($request->all());
  259. }
  260. /**
  261. * 删除内容
  262. */
  263. public function delete(Request $request)
  264. {
  265. $validator = Validator::make($request->all(), [
  266. 'id' => 'required|integer',
  267. ]);
  268. if ($validator->fails()) {
  269. return $this->response->error($validator->errors()->first(), 500);
  270. }
  271. return $this->postRepository->delete($request->all());
  272. }
  273. /**
  274. * 复原内容
  275. */
  276. public function restore(Request $request)
  277. {
  278. $validator = Validator::make($request->all(), [
  279. 'id' => 'required|integer',
  280. ]);
  281. if ($validator->fails()) {
  282. return $this->response->error($validator->errors()->first(), 500);
  283. }
  284. return $this->postRepository->restore($request->all());
  285. }
  286. /**
  287. * 删除评论
  288. */
  289. public function commentDelete(Request $request)
  290. {
  291. $validator = Validator::make($request->all(), [
  292. 'id' => 'required|integer',
  293. ]);
  294. if ($validator->fails()) {
  295. return $this->response->error($validator->errors()->first(), 500);
  296. }
  297. return $this->postRepository->commentDelete($request->all());
  298. }
  299. /**
  300. * 隐藏内容
  301. */
  302. public function hide(Request $request)
  303. {
  304. $validator = Validator::make($request->all(), [
  305. 'id' => 'required|integer',
  306. ]);
  307. if ($validator->fails()) {
  308. return $this->response->error($validator->errors()->first(), 500);
  309. }
  310. return $this->postRepository->hide($request->all());
  311. }
  312. /**
  313. * 日志列表
  314. */
  315. public function log(Request $request)
  316. {
  317. $commentList = $this->postRepository->log($request->all());
  318. $fractal = new Manager();
  319. $resource = new Collection($commentList, new LogTransformer());
  320. $resource->setPaginator(new IlluminatePaginatorAdapter($commentList));
  321. $data = $fractal->createData($resource)->toArray();
  322. $data['extra'] = [
  323. 'filters' => [
  324. 'log_type',
  325. 'created_at',
  326. ],
  327. 'columns' => [
  328. 'id',
  329. 'username',
  330. 'log_type',
  331. 'created_at',
  332. 'content',
  333. ]
  334. ];
  335. return $data;
  336. }
  337. public function statistics(Request $request)
  338. {
  339. $request = $request->all();
  340. $start = Carbon::parse(!empty($request['start']) ? Carbon::parse($request['start'])->startOfDay()->toDateTimeString() : Carbon::yesterday())->startOfDay()->toDateTimeString();
  341. $end = Carbon::parse(!empty($request['end']) ? Carbon::parse($request['end'])->endOfDay()->toDateTimeString() : Carbon::yesterday())->endOfDay()->toDateTimeString();
  342. return $this->postRepository->statistics($start, $end);
  343. }
  344. /**
  345. * 编辑内容话题
  346. */
  347. public function updateTopic(Request $request)
  348. {
  349. $validator = Validator::make($request->all(), [
  350. 'id' => 'required|integer',
  351. 'topic_ids' => 'required|string|max:64',
  352. ]);
  353. if ($validator->fails()) {
  354. return $this->response->error($validator->errors()->first(), 500);
  355. }
  356. return $this->postRepository->updateTopic($request->all());
  357. }
  358. /**
  359. * 获取网站内容
  360. */
  361. public function createStore(Request $request)
  362. {
  363. $validator = Validator::make($request->all(), [
  364. 'start_page' => 'required|integer',
  365. 'end_page' => 'required|integer',
  366. 'size' => 'required|integer',
  367. 'category_id' => 'required|integer',
  368. ]);
  369. if ($validator->fails()) {
  370. return $this->response->error($validator->errors()->first(), 500);
  371. }
  372. return $this->postRepository->createStore($request['start_page'], $request['end_page'], $request['size'], $request['category_id']);
  373. }
  374. /**
  375. * 获取网站内容
  376. */
  377. public function getStore(Request $request)
  378. {
  379. $productList = $this->postRepository->getStore($request->all());
  380. $fractal = new Manager();
  381. $resource = new Collection($productList, new PostStoreTransformer());
  382. $resource->setPaginator(new IlluminatePaginatorAdapter($productList));
  383. $data = $fractal->createData($resource)->toArray();
  384. $data['extra'] = [
  385. 'filters' => [
  386. 'type',
  387. 'category_id',
  388. 'title',
  389. 'content',
  390. 'source',
  391. 'is_used',
  392. ],
  393. 'columns' => [
  394. 'id',
  395. 'source',
  396. 'type',
  397. 'category_id',
  398. 'title',
  399. 'content',
  400. 'img',
  401. 'is_used',
  402. 'created_at',
  403. ]
  404. ];
  405. return $data;
  406. }
  407. /**
  408. * 网站内容详情
  409. */
  410. public function getStoreDetail(Request $request)
  411. {
  412. $validator = Validator::make($request->all(), [
  413. 'id' => 'required|exists:post_store'
  414. ]);
  415. if ($validator->fails()) {
  416. return $this->response->error($validator->errors()->first(), 500);
  417. }
  418. $post = $this->postRepository->getStoreDetail($request->all());
  419. return $this->response->item($post, new StoreDetailTransformer());
  420. }
  421. /**
  422. * 内容列表(批量替换话题)
  423. */
  424. public function topicList(Request $request)
  425. {
  426. $productList = $this->postRepository->topicList($request->all());
  427. $fractal = new Manager();
  428. $resource = new Collection($productList, new PostTopicTransformer());
  429. $resource->setPaginator(new IlluminatePaginatorAdapter($productList));
  430. $data = $fractal->createData($resource)->toArray();
  431. $data['extra'] = [
  432. 'filters' => [
  433. 'topic_id'
  434. ],
  435. 'columns' => [
  436. 'id',
  437. 'created_at',
  438. 'uid',
  439. 'topic',
  440. 'img',
  441. 'content',
  442. ]
  443. ];
  444. return $data;
  445. }
  446. /**
  447. * 批量替换话题
  448. */
  449. public function TopicUpdate(Request $request)
  450. {
  451. $validator = Validator::make($request->all(), [
  452. 'topic_id' => 'required|integer',
  453. 'to_topic_id' => 'required|integer',
  454. 'ids' => 'required|array',
  455. 'ids.*' => 'required|integer',
  456. ]);
  457. if ($validator->fails()) {
  458. return $this->response->error($validator->errors()->first(), 500);
  459. }
  460. return $this->postRepository->TopicUpdate($request->all());
  461. }
  462. }