CircleController.php 16 KB

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