xielin 5 年之前
父节点
当前提交
e6af9c95c7

+ 25 - 0
app/Http/Controllers/V1/CircleController.php

@@ -10,11 +10,13 @@ namespace App\Http\Controllers\V1;
 
 use App\Repositories\Circle\CircleArticleRepository;
 use App\Repositories\Circle\CircleMemberRepository;
+use App\Repositories\Circle\CircleMessageRepository;
 use App\Repositories\Circle\CircleRepository;
 use App\Traits\UserTrait;
 use App\Transformers\Circle\ArticleListTransformer;
 use App\Transformers\Circle\CircleMemberTransformer;
 use App\Transformers\Circle\DetailTransformer;
+use App\Transformers\Circle\MessageListTransformer;
 use App\Transformers\Circle\QuestionTransformer;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Log;
@@ -32,11 +34,13 @@ class CircleController extends Controller
 
     public function __construct(CircleRepository $circleRepository,
                                 CircleArticleRepository $circleArticleRepository,
+                                CircleMessageRepository $circleMessageRepository,
                                 CircleMemberRepository $circleMemberRepository)
     {
         $this->circleRepository = $circleRepository;
         $this->circleArticleRepository = $circleArticleRepository;
         $this->circleMemberRepository = $circleMemberRepository;
+        $this->circleMessageRepository = $circleMessageRepository;
     }
 
     /**
@@ -172,6 +176,11 @@ class CircleController extends Controller
         return jsonSuccess($data);
     }
 
+    /**
+     * 圈子成员列表
+     * @param Request $request
+     * @return array
+     */
     public function memberList(Request $request)
     {
         $validator = Validator::make($request->all(), [
@@ -188,4 +197,20 @@ class CircleController extends Controller
 
         return jsonSuccess($data);
     }
+
+    public function messageList(Request $request){
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:interest_circles'
+        ]);
+        if ($validator->fails()) {
+            return $this->jsonError($validator->errors()->first());
+        }
+        $list = $this->circleMessageRepository->lists($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($list, new MessageListTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($list));
+        $data = $fractal->createData($resource)->toArray();
+
+        return jsonSuccess($data);
+    }
 }

+ 4 - 0
app/Models/InterestCircle.php

@@ -17,4 +17,8 @@ class InterestCircle extends Model
     protected $table = 'interest_circles';
     protected $guarded = [];
 
+    public function imgs()
+    {
+        return $this->hasMany('App\Models\InterestCircleMessageImg', 'post_id', 'id');
+    }
 }

+ 53 - 0
app/Repositories/Circle/CircleMessageRepository.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\InterestCircleMessage;
+use App\Models\InterestCircleMessageComment;
+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 CircleMessageRepository
+{
+
+    public function __construct(InterestCircle $interestCircle,
+                                InterestCircleMessage $interestCircleMessage,
+                                InterestCircleMessageComment $interestCircleMessageComment
+    )
+    {
+        $this->interestCircle = $interestCircle;
+        $this->interestCircleMessage = $interestCircleMessage;
+        $this->interestCircleMessageComment = $interestCircleMessageComment;
+    }
+
+    /**
+     * 提问列表
+     */
+    public function lists($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+
+        $where[] = ['circle_id', $request['id']];
+
+        return $this->interestCircleMessage
+            ->where($where)
+            ->orderBy('is_recommend', 'desc')
+            ->orderBy('id', 'desc')
+            ->paginate($perPage);
+    }
+}

+ 5 - 21
app/Repositories/Circle/CircleRepository.php

@@ -73,12 +73,12 @@ class CircleRepository
             return jsonError('您已经加入该圈子了');
         }
         $circle = $this->interestCircle->where('id', $request['id'])->first();
-        $key = 'circle_error_count_' . $userInfo['uid'];
-        $errorCount = Redis::get($key);
-        if ($errorCount >= $circle->limit_condition) {
-            return jsonError('今日次数已用完,明天再来吧');
-        }
         if ($circle->join_limit) {
+            $key = 'circle_error_count_' . $userInfo['uid'];
+            $errorCount = Redis::get($key);
+            if ($errorCount >= $circle->limit_condition) {
+                return jsonError('今日次数已用完,明天再来吧');
+            }
             if (empty($request['answer'])) {
                 return jsonError('请输入答案~');
             }
@@ -223,20 +223,4 @@ class CircleRepository
         }
     }
 
-    /**
-     * 圈子用户列表
-     */
-    public function memberLists($request)
-    {
-        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
-        $where[] = ['is_black', 0];
-        $where[] = ['circle_id', $request['circle_id']];
-
-        $userModel = $this->interestCircleUser;
-
-        return $userModel
-            ->where($where)
-            ->orderBy('created_at', 'desc')
-            ->paginate($perPage);
-    }
 }

+ 88 - 0
app/Transformers/Circle/MessageListTransformer.php

@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/6
+ * Time: 14:08
+ */
+
+namespace App\Transformers\Circle;
+
+use App\Models\InterestCircle;
+use App\Models\InterestCircleMessage;
+use App\Models\Post;
+use App\Traits\PostTrait;
+use App\Traits\UserTrait;
+use Illuminate\Support\Carbon;
+use Illuminate\Support\Facades\Redis;
+use League\Fractal\TransformerAbstract;
+
+class MessageListTransformer extends TransformerAbstract
+{
+    use UserTrait;
+
+    public function transform(InterestCircleMessage $interestCircleMessage)
+    {
+        $user = $this->userInfo($interestCircleMessage['uid']);
+        return [
+            'id' => $interestCircleMessage['id'],
+            'created_at' => Carbon::parse($interestCircleMessage['created_at'])->diffForHumans(),
+            'user' => $user ? $user : new \stdClass(),
+            'content' => $interestCircleMessage['content'],
+            'imgs' => $postInfo['imgs'],
+            'good' => $interestCircleMessage['good'],
+            'bad' => $interestCircleMessage['bad'],
+            'comment_count' => $interestCircleMessage['comment_count'],
+            'comment' => $this->getNewComment($interestCircleMessage['id']),
+        ];
+    }
+
+    //获取内容最新评论
+    public function getNewComment($id, $uid = 0)
+    {
+        $comment = [];
+        $key = 'comment_like_' . $id;
+        $commentKey = 'post_new_comment_' . $id;
+        $commentData = Redis::GET($commentKey);
+        if ($commentData) {
+            $comment = json_decode($commentData, true);
+            foreach ($comment as &$item) {
+                $isLike = 0;
+                if ($uid) {
+                    $isLike = Redis::ZSCORE($key, $uid . '_' . $item['id']) ? 1 : 0;
+                }
+                $item['uid'] = intval($item['uid']);
+                $item['is_like'] = $isLike;
+                $item['like_count'] = Redis::ZCOUNT($key, $item['id'], $item['id']);
+                $item['reply_count'] = 0;
+                $item['reply'] = [];
+            }
+        } else {
+            $comments = PostComment::where('post_id', $id)->where('parent_id', 0)->where('is_delete', 0)->orderBy('like_count', 'desc')->orderBy('id', 'desc')->limit(2)->get();
+            foreach ($comments as $item) {
+                $userComment = $this->userInfo($item->uid);
+                $isLike = 0;
+                if ($uid) {
+                    $isLike = Redis::ZSCORE($key, $uid . '_' . $item->id) ? 1 : 0;
+                }
+                $likeCount = Redis::ZCOUNT($key, $item->id, $item->id);
+                $comment[] = [
+                    'id' => $item->id,
+                    'uid' => intval($userComment['uid']),
+                    'username' => $userComment['username'],
+                    'content' => $item->is_delete ? '该评论已被删除' : $item->content,
+                    'is_delete' => $item->is_delete,
+                    'is_like' => $isLike,
+                    'like_count' => $likeCount,
+                    'reply_count' => 0,
+                    'reply' => [],
+                ];
+            }
+            Redis::SET($commentKey, json_encode($comment));
+            Redis::EXPIRE($commentKey, 300);
+        }
+        sortArrByField($comment, 'like_count', true);
+        return $comment;
+    }
+}