service = new PostService(); } /** * 获取列表 * * @param Request $request 请求对象 * @return mixed 返回分页数据及总数 */ public function index(Request $request) { try { $raw = $this->service->serviceList($request); $data = $this->transformData($raw, method_exists($this, 'indexFormat') ? [$this, 'indexFormat'] : null); $records = $data['records']; foreach ($records as &$record) { if (!isset($record['id'])) break; if(!empty($request->user) && !empty($request->user->uid)){ $where = [ 'post_id' => $record['id'], 'user_id' => $request->user->uid ]; $record['is_like'] = PostLike::where($where)->count(); $record['is_favorite'] = PostFavorite::where($where)->count(); $record['is_comment'] = PostComment::where($where)->count(); }else{ $record['is_like'] = 0; $record['is_favorite'] = 0; $record['is_comment'] = 0; } $created_at = strtotime($record['created_at']); $record['year'] = date('Y', $created_at); $record['month'] = date('m', $created_at); $record['day'] = date('d', $created_at); } $data['records'] = $records; return $this->success($data); } catch (\Throwable $e) { return $this->error($e->getMessage().$e->getFile().$e->getLine()); } } /** * 列表页数据格式化 * * @param array $data * @return array */ protected function indexFormat($data) { if (isset($data['created_at'])) $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); if (isset($data['updated_at'])) $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); $ossservice = new OssService(); if (isset($data['id'])){ $data['media'] = PostMedia::where('post_id', $data['id'])->get()->toArray(); foreach ($data['media'] as &$media) { $media['url_pull'] = $ossservice->generatePrivateUrl($media['url']); } } if (isset($data['user_id'])){ $data['user'] = User::where('id', $data['user_id'])->first(); unset($data['user']['password']); $data['user']['avatar_pull'] = $data['user']['avatar']; if(!str_contains($data['user']['avatar'], 'http') && !empty($data['user']['avatar'])){ $data['user']['avatar_pull'] = $ossservice->generatePrivateUrl($data['user']['avatar']); } } if (isset($data['sku_id'])){ $sku = Sku::where('id', $data['sku_id'])->first(); if($sku){ $sku['main_image_pull'] = $ossservice->generatePrivateUrl($sku['main_image']); } if (!empty($sku['image'])){ $sku['image'] = explode(',',$sku['image']); foreach ($sku['image'] as $key => $image){ $sku['image_pull'][$key] = $ossservice->generatePrivateUrl($image); } } if (isset($sku['spec_json'])) $sku['spec'] = json_decode($sku['spec_json'], true); $data['sku'] = $sku; } return $data; } /** * 获取评论,点赞,收藏数量 * * @param Request $request 请求对象 * @param int|string $id 资源 ID * @return mixed 返回资源详情数据 */ public function interaction(Request $request) { try { $param = $request->all(); $data = Post::where('id', $param['id'])->select(['like','favorite','comment'])->first(); if(!empty($request->user) && !empty($request->user->uid)){ $where = [ 'post_id' => $data['id'], 'user_id' => $request->user->uid ]; $data['is_like'] = PostLike::where($where)->count(); $data['is_favorite'] = PostFavorite::where($where)->count(); $data['is_comment'] = PostComment::where($where)->count(); }else{ $data['is_like'] = 0; $data['is_favorite'] = 0; $data['is_comment'] = 0; } return $this->success($data); } catch (\Throwable $e) { return $this->error($e->getMessage().$e->getFile().$e->getLine()); } } /** * 获取详情 * * @param Request $request 请求对象 * @param int|string $id 资源 ID * @return mixed 返回资源详情数据 */ public function show(Request $request) { try { $raw = $this->service->serviceShow($request); $data = $this->transformData($raw, method_exists($this, 'showFormat') ? [$this, 'showFormat'] : null); if(!empty($request->user) && !empty($request->user->uid)){ $where = [ 'post_id' => $data['id'], 'user_id' => $request->user->uid ]; $data['is_like'] = PostLike::where($where)->count(); $data['is_favorite'] = PostFavorite::where($where)->count(); $data['is_comment'] = PostComment::where($where)->count(); }else{ $data['is_like'] = 0; $data['is_favorite'] = 0; $data['is_comment'] = 0; } return $this->success($data); } catch (\Throwable $e) { return $this->error($e->getMessage().$e->getFile().$e->getLine()); } } /** * 列表页数据格式化 * * @param array $data * @return array */ protected function showFormat($data) { if (isset($data['created_at'])) $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); if (isset($data['updated_at'])) $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); $ossservice = new OssService(); if (isset($data['id'])){ $data['media'] = PostMedia::where('post_id', $data['id'])->get()->toArray(); foreach ($data['media'] as &$media) { $media['url_pull'] = $ossservice->generatePrivateUrl($media['url']); } } if (isset($data['user_id'])){ $data['user'] = User::where('id', $data['user_id'])->first(); unset($data['user']['password']); $data['user']['avatar_pull'] = $data['user']['avatar']; if(!str_contains($data['user']['avatar'], 'http') && !empty($data['user']['avatar'])){ $data['user']['avatar_pull'] = $ossservice->generatePrivateUrl($data['user']['avatar']); } } if (isset($data['sku_id'])){ $sku = Sku::where('id', $data['sku_id'])->first(); if($sku){ $sku['main_image_pull'] = $ossservice->generatePrivateUrl($sku['main_image']); } if (!empty($sku['image'])){ $sku['image'] = explode(',',$sku['image']); foreach ($sku['image'] as $key => $image){ $sku['image_pull'][$key] = $ossservice->generatePrivateUrl($image); } } if (isset($sku['spec_json'])) $sku['spec'] = json_decode($sku['spec_json'], true); $data['sku'] = $sku; } return $data; } }