postRepositories = $postRepositories; } /** * 发布内容 */ public function create(Request $request) { $validator = Validator::make($request->all(), [ 'type' => ['required', Rule::in('image', 'video', 'html')], 'img' => 'required|url', 'video' => 'required_if:type,video|string', 'topic_ids' => 'required|string|max:64', 'title' => 'nullable|string|max:20', 'content' => 'required|string|max:1000', 'location' => 'nullable|string|max:32', 'imgs' => 'required_if:type,image|string', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } return $this->postRepositories->create($request->all()); } /** * 评论&回复 */ public function comment(Request $request) { $validator = Validator::make($request->all(), [ 'post_id' => 'required|integer', 'content' => 'required|string|max:150', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } return $this->postRepositories->comment($request->all()); } /** * 内容列表 */ public function index(Request $request) { Log::debug('内容搜索' . json_encode($request)); $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $list = $this->postRepositories->lists($request->all()); $fractal = new Manager(); $resource = new Collection($list, new ListTransformer($userInfo['uid'], $userInfo['invite_code'])); $resource->setPaginator(new IlluminatePaginatorAdapter($list)); $data = $fractal->createData($resource)->toArray(); return jsonSuccess($data); } /** * 视频列表 */ public function video(Request $request) { $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $list = $this->postRepositories->video($request->all()); $fractal = new Manager(); $resource = new Collection($list, new VideoTransformer($userInfo['uid'], $userInfo['invite_code'])); $resource->setPaginator(new IlluminatePaginatorAdapter($list)); $data = $fractal->createData($resource)->toArray(); return jsonSuccess($data); } /** * 个人中心内容 */ public function myPost(Request $request) { $validator = Validator::make($request->all(), [ 'type' => ['required', Rule::in('create', 'collect', 'share')], ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $param = $request->all(); if (isset($param['uid'])) { $uid = $param['uid']; } else { $uid = $userInfo['uid']; } $list = $this->postRepositories->myPost($param, $uid); $fractal = new Manager(); $resource = new Collection($list, new MyTransformer()); $resource->setPaginator(new IlluminatePaginatorAdapter($list)); $data = $fractal->createData($resource)->toArray(); return jsonSuccess($data); } /** * 推荐内容列表 */ public function suggestPost(Request $request) { $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $param = $request->all(); $list = $this->postRepositories->suggestPost($param); $fractal = new Manager(); $resource = new Collection($list, new SuggestTransformer($userInfo['uid'], $userInfo['invite_code'])); $resource->setPaginator(new IlluminatePaginatorAdapter($list)); $data = $fractal->createData($resource)->toArray(); if (!(isset($param['page']) && $param['page'] > 1)) { $key = 'suggest_post_floor'; $floor = Redis::get($key); if (!$floor) { $floor = $this->getFloorInfo(); if ($floor) { Redis::set($key, json_encode($floor)); Redis::expire($key, 600); } } else { $floor = json_decode($floor, true); } if ($floor) { $newData = []; foreach ($data['data'] as $key => $val) { if (isset($floor[$key + 1])) { if ($floor[$key + 1]['show_type'] == 'banner') { $bannerData = []; foreach ($floor[$key + 1]['data'] as $item) { if ($item['type'] == 1) { $postType = Post::where('id', $item['link_content_id'])->value('type'); if (!$postType) { Log::info('banner类型为内容,未找到内容,被丢弃' . json_encode($item)); continue; } $bannerData[] = array_merge($item, ['post_type' => $postType]); } else { $bannerData[] = $item; } } $newData[] = [ 'show_type' => 'banner', 'data' => $bannerData, ]; } elseif ($floor[$key + 1]['show_type'] == 'user') { $userData = []; foreach ($floor[$key + 1]['data'] as $item) { $userData[] = array_merge($item, ['follow_status' => $this->getFollowStatus($userInfo['uid'], $item['uid'])]); } if ($userData) { $newData[] = [ 'show_type' => 'user', 'data' => $userData, ]; } } elseif ($floor[$key + 1]['show_type'] == 'video') { $newData[] = [ 'show_type' => 'video', 'data' => $floor[$key + 1]['data'], ]; } elseif ($floor[$key + 1]['show_type'] == 'topic') { $newData[] = [ 'show_type' => 'topic', 'data' => $floor[$key + 1]['data'], ]; } } $newData[] = $val; } $data['data'] = $newData; } } return jsonSuccess($data); } /** * 内容详情 */ public function detail(Request $request) { Log::debug("内容详情-参数".json_encode($request)); $validator = Validator::make($request->all(), [ 'id' => 'required|integer', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $detail = $this->postRepositories->detail($request['id']); if (!$detail) { return jsonError('获取内容信息失败'); } $fractal = new Manager(); $res = new Item($detail, new DetailTransformer($userInfo['uid'], $userInfo['invite_code'])); $data = $fractal->createData($res)->toArray(); return jsonSuccess($data); } /** * 评论列表 */ public function commentList(Request $request) { $validator = Validator::make($request->all(), [ 'post_id' => 'required|integer', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } $exists = $this->postRepositories->detailExists($request['post_id']); if (!$exists) { return jsonError('获取内容信息失败'); } $list = $this->postRepositories->commentList($request->all()); $fractal = new Manager(); $resource = new Collection($list, new CommentTransformer()); $resource->setPaginator(new IlluminatePaginatorAdapter($list)); $data = $fractal->createData($resource)->toArray(); return jsonSuccess($data); } /** * 回复列表 */ public function replyList(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required|exists:post_comment', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } $list = $this->postRepositories->replyList($request->all()); $fractal = new Manager(); $resource = new Collection($list, new ReplyTransformer()); $resource->setPaginator(new IlluminatePaginatorAdapter($list)); $data = $fractal->createData($resource)->toArray(); return jsonSuccess($data); } /** * 话题列表 */ public function topicList(Request $request) { $list = $this->postRepositories->topicList($request->all()); $fractal = new Manager(); $resource = new Collection($list, new TopicListTransformer()); $resource->setPaginator(new IlluminatePaginatorAdapter($list)); $data = $fractal->createData($resource)->toArray(); return jsonSuccess($data); } /** * 话题详情 */ public function topicDetail(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required|integer', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $detail = $this->postRepositories->topicDetail($request['id']); if (!$detail) { return jsonError('获取话题信息失败'); } $fractal = new Manager(); $res = new Item($detail, new TopicDetailTransformer($userInfo['uid'])); $data = $fractal->createData($res)->toArray(); return jsonSuccess($data); } /** * 话题内容列表 */ public function topicPost(Request $request) { $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $list = $this->postRepositories->topicPost($request->all()); $fractal = new Manager(); $resource = new Collection($list, new TopicPostTransformer($userInfo['uid'], $userInfo['invite_code'])); $resource->setPaginator(new IlluminatePaginatorAdapter($list)); $data = $fractal->createData($resource)->toArray(); return jsonSuccess($data); } /** * 获取话题 */ public function getTopic(Request $request) { $validator = Validator::make($request->all(), [ 'ids' => 'required|string', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } $data = $this->postRepositories->getTopic($request['ids']); return jsonSuccess($data); } /** * 获取内容视频组 */ public function getPostVideo(Request $request) { $validator = Validator::make($request->all(), [ 'ids' => 'required|string', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } $data = $this->postRepositories->getPostVideo($request['ids']); return jsonSuccess($data); } //用户内容数统计 public function memberPostStatistics(Request $request) { $validator = Validator::make($request->all(), [ 'uid' => 'required|int', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } return $this->postRepositories->memberPostStatistics($request['uid']); } /** * 删除内容 */ public function delete(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required|integer', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } return $this->postRepositories->delete($request->all()); } /** * 查询帖子内容详情(内部接口使用) */ public function find(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required|integer', ]); if ($validator->fails()) { return jsonError($validator->errors()->first()); } $detail = $this->postRepositories->detail($request['id']); if (!$detail) { return jsonError('获取内容信息失败'); } $fractal = new Manager(); $res = new Item($detail, new PostTransformer()); $data = $fractal->createData($res)->toArray(); return jsonSuccess($data); } }