CircleController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/6/14
  6. * Time: 16:23
  7. */
  8. namespace App\Http\Controllers\V1;
  9. use App\Repositories\Circle\CircleArticleRepository;
  10. use App\Repositories\Circle\CircleMemberRepository;
  11. use App\Repositories\Circle\CircleMessageRepository;
  12. use App\Repositories\Circle\CircleRepository;
  13. use App\Traits\UserTrait;
  14. use App\Transformers\Circle\ArticleListTransformer;
  15. use App\Transformers\Circle\CircleMemberTransformer;
  16. use App\Transformers\Circle\CommentTransformer;
  17. use App\Transformers\Circle\DetailTransformer;
  18. use App\Transformers\Circle\MessageListTransformer;
  19. use App\Transformers\Circle\QuestionTransformer;
  20. use App\Transformers\Circle\ReplyTransformer;
  21. use Illuminate\Http\Request;
  22. use Illuminate\Support\Facades\Log;
  23. use Illuminate\Support\Facades\Redis;
  24. use Illuminate\Support\Facades\Validator;
  25. use Illuminate\Validation\Rule;
  26. use League\Fractal\Manager;
  27. use League\Fractal\Pagination\IlluminatePaginatorAdapter;
  28. use League\Fractal\Resource\Collection;
  29. use League\Fractal\Resource\Item;
  30. class CircleController extends Controller
  31. {
  32. use UserTrait;
  33. public function __construct(CircleRepository $circleRepository,
  34. CircleArticleRepository $circleArticleRepository,
  35. CircleMessageRepository $circleMessageRepository,
  36. CircleMemberRepository $circleMemberRepository)
  37. {
  38. $this->circleRepository = $circleRepository;
  39. $this->circleArticleRepository = $circleArticleRepository;
  40. $this->circleMemberRepository = $circleMemberRepository;
  41. $this->circleMessageRepository = $circleMessageRepository;
  42. }
  43. /**
  44. * 圈子检测
  45. * @param Request $request
  46. * @return array
  47. */
  48. public function valid(Request $request)
  49. {
  50. $userInfo = $this->getUserInfo();
  51. if ($userInfo) {
  52. $uid = $userInfo['uid'];
  53. } else {
  54. $uid = 0;
  55. }
  56. $validator = Validator::make($request->all(), [
  57. 'id' => 'required|exists:interest_circles'
  58. ]);
  59. if ($validator->fails()) {
  60. return $this->jsonError($validator->errors()->first());
  61. }
  62. $request = $request->all();
  63. $circleInfo = $this->circleRepository->detail($request);
  64. if ($circleInfo && $circleInfo->is_open == 0) {
  65. return $this->jsonError('当前圈子已关闭');
  66. }
  67. if ($uid) {
  68. $row = $this->circleMemberRepository
  69. ->where('circle_id', $request['id'])
  70. ->where('uid', $uid)
  71. ->where('is_black', 1)->exists();
  72. if ($row) {
  73. return $this->jsonError('您无法进入该聊天室');
  74. }
  75. }
  76. return $this->jsonSuccess();
  77. }
  78. /**
  79. * 圈子首页
  80. * @param Request $request
  81. */
  82. public function index(Request $request)
  83. {
  84. $userInfo = $this->getUserInfo();
  85. if ($userInfo) {
  86. $uid = $userInfo['uid'];
  87. } else {
  88. $uid = 0;
  89. }
  90. $validator = Validator::make($request->all(), [
  91. 'id' => 'required|exists:interest_circles'
  92. ]);
  93. if ($validator->fails()) {
  94. return $this->jsonError($validator->errors()->first());
  95. }
  96. $detail = $this->circleRepository->detail($request->all());
  97. if ($detail) {
  98. $fractal = new Manager();
  99. $res = new Item($detail, new DetailTransformer($uid));
  100. $data = $fractal->createData($res)->toArray();
  101. }
  102. return $this->jsonSuccess($data);
  103. }
  104. /**
  105. * 查询圈子问题
  106. * @param Request $request
  107. * @return array
  108. */
  109. public function getQuestion(Request $request)
  110. {
  111. $userInfo = $this->getUserInfo();
  112. if ($userInfo) {
  113. $uid = $userInfo['uid'];
  114. } else {
  115. $uid = 0;
  116. }
  117. $validator = Validator::make($request->all(), [
  118. 'id' => 'required|exists:interest_circles'
  119. ]);
  120. if ($validator->fails()) {
  121. return $this->jsonError($validator->errors()->first());
  122. }
  123. $detail = $this->circleRepository->detail($request->all());
  124. if ($detail) {
  125. $fractal = new Manager();
  126. $res = new Item($detail, new QuestionTransformer($uid));
  127. $data = $fractal->createData($res)->toArray();
  128. }
  129. return $this->jsonSuccess($data);
  130. }
  131. /**
  132. * 加入圈子
  133. * @param Request $request
  134. * @return array
  135. */
  136. public function joinCircle(Request $request)
  137. {
  138. $userInfo = $this->getUserInfo();
  139. if (empty($userInfo)) {
  140. return $this->jsonError('获取用户信息失败');
  141. }
  142. // else{
  143. // $userInfo['uid'] = 268;
  144. // }
  145. $validator = Validator::make($request->all(), [
  146. 'id' => 'required|exists:interest_circles'
  147. ]);
  148. if ($validator->fails()) {
  149. return $this->jsonError($validator->errors()->first());
  150. }
  151. return $this->circleRepository->joinCircle($request->all(), $userInfo);
  152. }
  153. /**
  154. * 退出圈子
  155. * @param Request $request
  156. * @return array
  157. */
  158. public function exitCircle(Request $request)
  159. {
  160. $userInfo = $this->getUserInfo();
  161. if (empty($userInfo)) {
  162. return $this->jsonError('获取用户信息失败');
  163. }
  164. // else{
  165. // $userInfo['uid'] = 268;
  166. // }
  167. $validator = Validator::make($request->all(), [
  168. 'id' => 'required|exists:interest_circles'
  169. ]);
  170. if ($validator->fails()) {
  171. return $this->jsonError($validator->errors()->first());
  172. }
  173. return $this->circleRepository->exitCircle($request->all(), $userInfo);
  174. }
  175. /**
  176. * 精华列表
  177. * @param Request $request
  178. * @return array
  179. */
  180. public function articleList(Request $request)
  181. {
  182. $userInfo = $this->getUserInfo();
  183. if ($userInfo) {
  184. $uid = $userInfo['uid'];
  185. $inviteCode = $userInfo['invite_code'];
  186. } else {
  187. $uid = 0;
  188. $inviteCode = '';
  189. }
  190. $validator = Validator::make($request->all(), [
  191. 'id' => 'required|exists:interest_circles'
  192. ]);
  193. if ($validator->fails()) {
  194. return $this->jsonError($validator->errors()->first());
  195. }
  196. $list = $this->circleArticleRepository->lists($request->all());
  197. $fractal = new Manager();
  198. $resource = new Collection($list, new ArticleListTransformer($uid, $inviteCode));
  199. $resource->setPaginator(new IlluminatePaginatorAdapter($list));
  200. $data = $fractal->createData($resource)->toArray();
  201. return jsonSuccess($data);
  202. }
  203. /**
  204. * 圈子成员列表
  205. * @param Request $request
  206. * @return array
  207. */
  208. public function memberList(Request $request)
  209. {
  210. $validator = Validator::make($request->all(), [
  211. 'id' => 'required|exists:interest_circles'
  212. ]);
  213. if ($validator->fails()) {
  214. return $this->jsonError($validator->errors()->first());
  215. }
  216. $list = $this->circleMemberRepository->lists($request->all());
  217. $fractal = new Manager();
  218. $resource = new Collection($list, new CircleMemberTransformer());
  219. $resource->setPaginator(new IlluminatePaginatorAdapter($list));
  220. $data = $fractal->createData($resource)->toArray();
  221. return jsonSuccess($data);
  222. }
  223. /**
  224. * 提问列表
  225. * @param Request $request
  226. * @return array
  227. */
  228. public function messageList(Request $request)
  229. {
  230. $userInfo = $this->getUserInfo();
  231. if ($userInfo) {
  232. $uid = $userInfo['uid'];
  233. } else {
  234. $uid = 0;
  235. }
  236. $validator = Validator::make($request->all(), [
  237. 'id' => 'required|exists:interest_circles'
  238. ]);
  239. if ($validator->fails()) {
  240. return $this->jsonError($validator->errors()->first());
  241. }
  242. $list = $this->circleMessageRepository->lists($request->all());
  243. $fractal = new Manager();
  244. $resource = new Collection($list, new MessageListTransformer($uid));
  245. $resource->setPaginator(new IlluminatePaginatorAdapter($list));
  246. $data = $fractal->createData($resource)->toArray();
  247. return jsonSuccess($data);
  248. }
  249. /**
  250. * 发布提问
  251. */
  252. public function messageCreate(Request $request)
  253. {
  254. $validator = Validator::make($request->all(), [
  255. 'circle_id' => 'required|integer',
  256. 'content' => 'required|string|max:150',
  257. ]);
  258. if ($validator->fails()) {
  259. return jsonError($validator->errors()->first());
  260. }
  261. return $this->circleMessageRepository->create($request->all());
  262. }
  263. /**
  264. * 评论&回复
  265. */
  266. public function comment(Request $request)
  267. {
  268. $validator = Validator::make($request->all(), [
  269. 'circle_id' => 'required|integer',
  270. 'msg_id' => 'required|integer',
  271. 'content' => 'required|string|max:150',
  272. ]);
  273. if ($validator->fails()) {
  274. return jsonError($validator->errors()->first());
  275. }
  276. return $this->circleMessageRepository->createComment($request->all());
  277. }
  278. /**
  279. * 评论列表
  280. */
  281. public function commentList(Request $request)
  282. {
  283. $validator = Validator::make($request->all(), [
  284. 'msg_id' => 'required|integer',
  285. ]);
  286. if ($validator->fails()) {
  287. return jsonError($validator->errors()->first());
  288. }
  289. $exists = $this->circleMessageRepository->detail($request['msg_id']);
  290. if (!$exists) {
  291. return jsonError('内容飞走了');
  292. }
  293. $userInfo = $this->getUserInfo();
  294. if ($userInfo) {
  295. $uid = $userInfo['uid'];
  296. }else{
  297. $uid = 0;
  298. }
  299. $list = $this->circleMessageRepository->commentList($request->all());
  300. $fractal = new Manager();
  301. $resource = new Collection($list, new CommentTransformer($request['msg_id'], $uid));
  302. $resource->setPaginator(new IlluminatePaginatorAdapter($list));
  303. $data = $fractal->createData($resource)->toArray();
  304. $commentCount = $this->circleMessageRepository->getCommentCount($request['msg_id']);
  305. return jsonSuccess($data, '成功', ['comment_count' => $commentCount]);
  306. }
  307. /**
  308. * 回复列表
  309. */
  310. public function replyList(Request $request)
  311. {
  312. $validator = Validator::make($request->all(), [
  313. 'comment_id' => 'required|integer',
  314. ]);
  315. if ($validator->fails()) {
  316. return jsonError($validator->errors()->first());
  317. }
  318. $list = $this->circleMessageRepository->replyList($request->all());
  319. $fractal = new Manager();
  320. $resource = new Collection($list, new ReplyTransformer());
  321. $resource->setPaginator(new IlluminatePaginatorAdapter($list));
  322. $data = $fractal->createData($resource)->toArray();
  323. return jsonSuccess($data);
  324. }
  325. /**
  326. * 圈子顶踩
  327. * @param Request $request
  328. * @return array
  329. */
  330. public function messageAction(Request $request){
  331. $validator = Validator::make($request->all(), [
  332. 'msg_id' => 'required|integer',
  333. 'action' => ['required',Rule::in([1,-1])],
  334. ]);
  335. if ($validator->fails()) {
  336. return jsonError($validator->errors()->first());
  337. }
  338. return $this->circleMessageRepository->messageAction($request);
  339. }
  340. /**
  341. * 删除内容
  342. */
  343. public function delete(Request $request)
  344. {
  345. $validator = Validator::make($request->all(), [
  346. 'id' => 'required|integer',
  347. ]);
  348. if ($validator->fails()) {
  349. return jsonError($validator->errors()->first());
  350. }
  351. return $this->postRepositories->delete($request->all());
  352. }
  353. }