xielin 5 anos atrás
pai
commit
aad6d3f540

+ 46 - 10
app/Http/Controllers/V1/CircleController.php

@@ -8,8 +8,10 @@
 
 namespace App\Http\Controllers\V1;
 
+use App\Repositories\Circle\CircleArticleRepository;
 use App\Repositories\Circle\CircleRepository;
 use App\Traits\UserTrait;
+use App\Transformers\Circle\ArticleListTransformer;
 use App\Transformers\Circle\DetailTransformer;
 use App\Transformers\Circle\QuestionTransformer;
 use Illuminate\Http\Request;
@@ -25,9 +27,12 @@ use League\Fractal\Resource\Item;
 class CircleController extends Controller
 {
     use UserTrait;
-    public function __construct(CircleRepository $circleRepository)
+
+    public function __construct(CircleRepository $circleRepository,
+                                CircleArticleRepository $circleArticleRepository)
     {
         $this->circleRepository = $circleRepository;
+        $this->circleArticleRepository = $circleArticleRepository;
     }
 
     /**
@@ -39,7 +44,7 @@ class CircleController extends Controller
         $userInfo = $this->getUserInfo();
         if ($userInfo) {
             $uid = $userInfo['uid'];
-        }else{
+        } else {
             $uid = 0;
         }
         $validator = Validator::make($request->all(), [
@@ -62,11 +67,12 @@ class CircleController extends Controller
      * @param Request $request
      * @return array
      */
-    public function getQuestion(Request $request){
+    public function getQuestion(Request $request)
+    {
         $userInfo = $this->getUserInfo();
         if ($userInfo) {
             $uid = $userInfo['uid'];
-        }else{
+        } else {
             $uid = 0;
         }
         $validator = Validator::make($request->all(), [
@@ -89,9 +95,10 @@ class CircleController extends Controller
      * @param Request $request
      * @return array
      */
-    public function joinCircle(Request $request){
+    public function joinCircle(Request $request)
+    {
         $userInfo = $this->getUserInfo();
-        if($userInfo){
+        if (empty($userInfo)) {
             return $this->jsonError('获取用户信息失败');
         }
 //        else{
@@ -104,7 +111,7 @@ class CircleController extends Controller
         if ($validator->fails()) {
             return $this->jsonError($validator->errors()->first());
         }
-        return $this->circleRepository->joinCircle($request->all(),$userInfo);
+        return $this->circleRepository->joinCircle($request->all(), $userInfo);
     }
 
     /**
@@ -112,9 +119,10 @@ class CircleController extends Controller
      * @param Request $request
      * @return array
      */
-    public function exitCircle(Request $request){
+    public function exitCircle(Request $request)
+    {
         $userInfo = $this->getUserInfo();
-        if($userInfo){
+        if (empty($userInfo)) {
             return $this->jsonError('获取用户信息失败');
         }
 //        else{
@@ -127,8 +135,36 @@ class CircleController extends Controller
         if ($validator->fails()) {
             return $this->jsonError($validator->errors()->first());
         }
-        return $this->circleRepository->exitCircle($request->all(),$userInfo);
+        return $this->circleRepository->exitCircle($request->all(), $userInfo);
     }
 
+    /**
+     * 精华列表
+     * @param Request $request
+     * @return array
+     */
+    public function articleList(Request $request)
+    {
+        $userInfo = $this->getUserInfo();
+        if ($userInfo) {
+            $uid = $userInfo['uid'];
+            $inviteCode = $userInfo['invite_code'];
+        }else{
+            $uid = 0;
+            $inviteCode = '';
+        }
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:interest_circles'
+        ]);
+        if ($validator->fails()) {
+            return $this->jsonError($validator->errors()->first());
+        }
+        $list = $this->circleArticleRepository->lists($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($list, new ArticleListTransformer($uid, $inviteCode));
+        $resource->setPaginator(new IlluminatePaginatorAdapter($list));
+        $data = $fractal->createData($resource)->toArray();
 
+        return jsonSuccess($data);
+    }
 }

+ 2 - 2
app/Http/Controllers/V1/PostController.php

@@ -19,7 +19,7 @@ use App\Transformers\Post\ListTransformer;
 use App\Transformers\Post\MyTransformer;
 use App\Transformers\Post\PostTransformer;
 use App\Transformers\Post\ReplyTransformer;
-use App\Transformers\Post\SuggestTransformer;
+use App\Transformers\Post\ArticleListTransformer;
 use App\Transformers\Post\VideoTransformer;
 use App\Transformers\Topic\MyTopicListTransformer;
 use App\Transformers\Topic\TopicDetailTransformer;
@@ -193,7 +193,7 @@ class PostController extends Controller
         $param = $request->all();
         $list = $this->postRepositories->suggestPost($param,$uid);
         $fractal = new Manager();
-        $resource = new Collection($list, new SuggestTransformer($uid, $inviteCode));
+        $resource = new Collection($list, new ArticleListTransformer($uid, $inviteCode));
         $resource->setPaginator(new IlluminatePaginatorAdapter($list));
         $data = $fractal->createData($resource)->toArray();
 

+ 53 - 0
app/Repositories/Circle/CircleArticleRepository.php

@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/5
+ * Time: 16:03
+ */
+
+namespace App\Repositories\Circle;
+
+use App\Models\InterestCircle;
+use App\Models\InterestCircleArticle;
+use App\Models\InterestCircleUser;
+use App\Models\Post;
+use Illuminate\Database\QueryException;
+use Dingo\Api\Http\Response;
+use Illuminate\Support\Carbon;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Redis;
+
+class CircleArticleRepository
+{
+
+    public function __construct(InterestCircle $interestCircle,
+                                InterestCircleArticle $interestCircleArticle,
+                                Post $post)
+    {
+        $this->interestCircle = $interestCircle;
+        $this->interestCircleArticle = $interestCircleArticle;
+        $this->post = $post;
+    }
+
+    /**
+     * 内容列表
+     */
+    public function lists($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+
+        $where[] = ['interest_circle_articles.circle_id', $request['id']];
+
+        $articleModel = $this->post;
+        return $articleModel
+            ->join('interest_circle_articles', 'interest_circle_articles.post_id', '=', 'post.id')
+            ->select('post.*', 'interest_circle_articles.is_recommend', 'interest_circle_articles.circle_id')
+            ->where($where)
+            ->orderBy('interest_circle_articles.is_recommend', 'desc')
+            ->orderBy('post.weight', 'desc')
+            ->paginate($perPage);
+    }
+}

+ 73 - 0
app/Transformers/Circle/ArticleListTransformer.php

@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/15
+ * Time: 11:07
+ */
+namespace  App\Transformers\Circle;
+
+use App\Models\Post;
+use App\Traits\PostTrait;
+use App\Traits\UserTrait;
+use Carbon\Carbon;
+use Illuminate\Support\Facades\Redis;
+use League\Fractal\TransformerAbstract;
+
+class ArticleListTransformer extends TransformerAbstract
+{
+    use UserTrait;
+    use PostTrait;
+    public function __construct($uid, $invite_code)
+    {
+        $this->uid = $uid;
+        $this->invite_code = $invite_code;
+    }
+    public function transform(Post $post)
+    {
+        $isLike = 0;
+        $isDislike = 0;
+        $isCollect = 0;
+        if($this->uid){
+            $isLike = Redis::SISMEMBER('post_like_'.$post['id'], $this->uid);
+            $isDislike = Redis::SISMEMBER('post_unlike_'.$post['id'], $this->uid);
+            $isCollect = Redis::SISMEMBER('post_collect_'.$post['id'], $this->uid);
+        }
+        $user = $this->userInfo($post['uid']);
+        $postInfo = $this->getPostInfo($post['id']);
+        if($post['type']=='html'){
+            $content = subtext($post['content'],100);
+        }else{
+            $content = $post['content'];
+        }
+        return [
+            'id' => $post['id'],
+            'type' => $post['type'],
+            'created_at' => Carbon::parse($post['created_at'])->diffForHumans(),
+            'uid' => $post['uid'],
+            'username' => $user['username'],
+            'avatar' => $user['avatar'],
+            'topic' => $this->getTopic($post['topic_ids']),
+            'is_fine' => $post['is_fine'],
+            'title' => $post['title'],
+            'content' => $content,
+            'location' => $post['location'],
+            'img' => $post['img'],
+            'imgs' => $postInfo['imgs'],
+            'video' => $post['video'],
+            'pv' => getNumber($postInfo['pv']),
+            'praise_count' => $postInfo['praise_count'],
+            'comment_count' => $postInfo['comment_count'],
+            'collect_count' => $postInfo['collect_count'],
+            'will_collect_bean' => $postInfo['will_collect_bean'],
+            'is_like' => $isLike,
+            'is_dislike' => $isDislike,
+            'is_collect' => $isCollect,
+            'comment' => $this->getNewComment($post['id'], $this->uid),
+            'is_follow' => $this->getFollowStatus($this->uid, $post['uid']),
+            'h5url' => config('customer.share_post_h5url')."?post_id={$post['id']}&invite_code={$this->invite_code}",
+            'desc_url' => $post['type'] == 'html'?config('customer.app_service_url').'/community/fragment/detail/'.$post['id']:'',
+        ];
+    }
+}

+ 2 - 0
routes/api.php

@@ -76,6 +76,8 @@ $api->version('v1', [
     $api->get('circle', 'CircleController@index');
     //圈子问题
     $api->get('circle/question', 'CircleController@getQuestion');
+    //圈子精华文章列表
+    $api->get('circle/articles', 'CircleController@articleList');
     //登录+验签
     $api->group(['middleware' => ['chxq_jwt_auth','chxq_sign']], function ($api) {
         //发布内容