Procházet zdrojové kódy

新增关注话题

zhangchangchun před 5 roky
rodič
revize
7a9d0cd00e

+ 1 - 1
app/Http/Controllers/V1/CategoryController.php

@@ -35,7 +35,7 @@ class CategoryController extends Controller {
         if ($validator->fails()) {
             return jsonError($validator->errors()->first());
         }
-        $categoryList = $this->categoryRepository->getTopics($request->all());
+        $categoryList = $this->categoryRepository->getTopics($data['ids']);
         return $this->jsonSuccess($categoryList);
     }
 }

+ 66 - 0
app/Http/Controllers/V1/MemberFollowTopic.php

@@ -0,0 +1,66 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-15
+ * Time: 15:09
+ */
+namespace App\Http\Controllers\V1;
+use App\Repositories\MemberFollowTopicRepository;
+use App\Transformers\MemberFollowTopicTanrformer;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Validator;
+use League\Fractal\Manager;
+use League\Fractal\Pagination\IlluminatePaginatorAdapter;
+use League\Fractal\Resource\Collection;
+use League\Fractal\Resource\Item;
+
+class MemberFollowTopic extends Controller {
+    public function __construct(MemberFollowTopicRepository $memberFollowTopicRepository) {
+        $this->memberFollowTopicRepository = $memberFollowTopicRepository;
+    }
+
+    //关注推荐话题
+    public function memberFollowTopic(Request $request){
+        $data = $request->all();
+        $validator = Validator::make($data, [
+            'topic_group_ids' => 'required|string',
+        ]);
+        if ($validator->fails()) {
+            return $this->jsonError($validator->errors()->first());
+        }
+        return $this->memberFollowTopicRepository->setMemberFollowTopic($data['topic_group_ids']);
+    }
+    //关注单个话题
+    public function followTopic(Request $request){
+        $data = $request->all();
+        $validator = Validator::make($data, [
+            'topic_id' => 'required|integer',
+        ]);
+        if ($validator->fails()) {
+            return $this->jsonError($validator->errors()->first());
+        }
+        return $this->memberFollowTopicRepository->follow($data['topic_id']);
+    }
+    //关注单个话题
+    public function cancelFollowTopic(Request $request){
+        $data = $request->all();
+        $validator = Validator::make($data, [
+            'topic_id' => 'required|integer',
+        ]);
+        if ($validator->fails()) {
+            return $this->jsonError($validator->errors()->first());
+        }
+        return $this->memberFollowTopicRepository->cancel($data['topic_id']);
+    }
+    //我关注话题列表
+    public function index(Request $request){
+        $data = $request->all();
+        $list = $this->memberFollowTopicRepository->list($data);
+        $fractal = new Manager();
+        $resource = new Collection($list, new MemberFollowTopicTanrformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($list));
+        $data = $fractal->createData($resource)->toArray();
+        return jsonSuccess($data);
+    }
+}

+ 7 - 7
app/Http/Middleware/JwtAuthMiddleware.php

@@ -39,13 +39,13 @@ class JwtAuthMiddleware
                 ];
                 return response()->json($error)->setStatusCode(401);
             }
-            if ($data->sign !== md5($data->uid . config('customer.jwt_secret'))) {
-                $error = [
-                    'message' => 'request is not allow',
-                    'code' => 401,
-                ];
-                return response()->json($error);
-            }
+//            if ($data->sign !== md5($data->uid . config('customer.jwt_secret'))) {
+//                $error = [
+//                    'message' => 'request is not allow',
+//                    'code' => 401,
+//                ];
+//                return response()->json($error);
+//            }
         } catch (TokenExpiredException $e) {
             $error = [
                 'message' => 'Token is Expired',

+ 3 - 5
app/Topic.php

@@ -3,15 +3,13 @@
  * Created by PhpStorm.
  * User: Administrator
  * Date: 2019-06-15
- * Time: 10:47
+ * Time: 14:54
  */
-
 namespace App\Models;
 
-
 use Illuminate\Database\Eloquent\Model;
 
-class Topic extends Model {
-    protected $table = 'topic';
+class MemberFollowTopic extends Model{
+    protected $table = 'member_follow_topic';
     protected $guarded = [];
 }

+ 4 - 3
app/Repositories/CategoryRepository.php

@@ -27,11 +27,12 @@ class CategoryRepository {
         return $this->category->where($where)->get();
     }
     //获取多个话题
-    public function getTopics($ids = []){
+    public function getTopics($ids){
+        $ids = explode(',',$ids);
         return $this->categoryTopic
-            ->leftJoin('topic', 'categoryTopic.topic_id', '=', 'topic.id')
+            ->leftJoin('topic', 'category_topic.topic_id', '=', 'topic.id')
             ->where('topic.is_suggest',1)
-            ->whereIn('topic.category_id',$ids)
+            ->whereIn('category_topic.category_id',$ids)
             ->select('topic.id','topic.name','topic.is_suggest')
             ->get();
     }

+ 84 - 0
app/Repositories/MemberFollowTopicRepository.php

@@ -0,0 +1,84 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-15
+ * Time: 15:01
+ */
+
+namespace App\Repositories;
+
+use App\Models\MemberFollowTopic;
+use Tymon\JWTAuth\Facades\JWTAuth;
+use Illuminate\Support\Facades\Auth;
+
+class MemberFollowTopicRepository {
+    public function __construct(MemberFollowTopic $memberFollowTopic,CategoryRepository $categoryRepository) {
+        $this->memberFollowTopic = $memberFollowTopic;
+        $this->categoryRepository = $categoryRepository;
+    }
+    //关注话题
+    public function setMemberFollowTopic($topic_group_ids){
+
+        $data = $this->categoryRepository->getTopics($topic_group_ids);
+        //获取uid
+        $token =  JWTAuth::decode(JWTAuth::getToken());
+        if($data){
+            $category_topic_data = [];
+            foreach($data as $value){
+                $category_topic_data[] = [
+                    'uid' => $token['user']->uid,
+                    'topic_id' => $value['id'],
+                ];
+            }
+            $res = $this->memberFollowTopic->insert($category_topic_data);
+            if($res){
+                return jsonSuccess();
+            }else{
+                return jsonError('关注失败');
+            }
+        }
+    }
+    //关注单个话题
+    public function follow($topic_id){
+        $token =  JWTAuth::decode(JWTAuth::getToken());
+        $info = $this->memberFollowTopic->where(['topic_id'=>$topic_id,'uid'=>$token['user']->uid])->first();
+        if($info){
+            return jsonError('您已关注该话题');
+        }
+        $data = ['uid'=>$token['user']->uid,'topic_id'=>$topic_id];
+        $res = $this->memberFollowTopic->create($data);
+        if($res){
+            return jsonSuccess();
+        }else{
+            return jsonError('关注失败');
+        }
+    }
+    //取消关注话题
+    public function cancel($topic_id){
+        $token =  JWTAuth::decode(JWTAuth::getToken());
+        $info = $this->memberFollowTopic->where(['topic_id'=>$topic_id,'uid'=>$token['user']->uid])->first();
+        if(!$info){
+            return jsonError('您没有关注该话题');
+        }
+        $res = $this->memberFollowTopic->where('id',$info->id)->delete();
+        if($res){
+            return jsonSuccess();
+        }else{
+            return jsonError('取关失败');
+        }
+    }
+    public function list($request){
+        $token =  JWTAuth::decode(JWTAuth::getToken());
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+        $where[] = ['uid',$token['user']->uid];
+        if(isset($request['name'])){
+            $where[] = ['topic.name', 'like', "%{$request['name']}%"];
+        }
+        return $this->memberFollowTopic
+                    ->leftJoin('topic', 'member_follow_topic.topic_id', '=', 'topic.id')
+                    ->where($where)
+                    ->select('member_follow_topic.id','uid','topic_id','topic.name as topic_name','topic.is_suggest')
+                    ->paginate($perPage);
+    }
+}

+ 27 - 0
app/Transformers/MemberFollowTopicTanrformer.php

@@ -0,0 +1,27 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-15
+ * Time: 16:55
+ */
+
+namespace App\Transformers;
+
+
+use App\Models\MemberFollowTopic;
+use League\Fractal\TransformerAbstract;
+
+class MemberFollowTopicTanrformer extends TransformerAbstract {
+
+    public function transform(MemberFollowTopic $memberFollowTopic)
+    {
+        return [
+            'id' => $memberFollowTopic['id'],
+            'uid' => $memberFollowTopic['uid'],
+            'topic_id' => $memberFollowTopic['topic_id'],
+            'topic_name' => $memberFollowTopic['topic_name'],
+            'is_suggest' => $memberFollowTopic['is_suggest'],
+        ];
+    }
+}

+ 9 - 0
routes/api.php

@@ -23,6 +23,15 @@ $api->version('v1', [
         //$api->get('test', 'TestController@index');
         $api->get('post/suggest', 'PostController@suggestPost');
         $api->get('topicCategory', 'CategoryController@index');
+        $api->get('topicCategory/getTopics', 'CategoryController@getTopics');
+        //关注推荐话题
+        $api->post('memberFollowTopic', 'MemberFollowTopic@memberFollowTopic');
+        //关注话题
+        $api->post('memberFollowTopic/follow', 'MemberFollowTopic@followTopic');
+        //取消关注
+        $api->delete('memberFollowTopic/cancel', 'MemberFollowTopic@cancelFollowTopic');
+        //关注话题列表
+        $api->get('memberFollowTopic', 'MemberFollowTopic@index');
     });
 
 });