xielin 5 年之前
父节点
当前提交
6a8ee0de3c

+ 35 - 1
app/Http/Controllers/Circle/CircleController.php

@@ -11,6 +11,7 @@ namespace App\Http\Controllers\Circle;
 
 use App\Repositories\Circle\CircleArticleRepository;
 use App\Repositories\Circle\CircleRepository;
+use App\Transformers\Circle\ArticleListTransformer;
 use App\Transformers\Circle\DetailTransformer;
 use App\Transformers\Circle\InterestCirclePictureTransformer;
 use App\Transformers\Circle\InterestCircleTransformer;
@@ -179,7 +180,7 @@ class CircleController extends Controller
     {
         $articleList = $this->circleArticleRepository->lists($request->all());
         $fractal = new Manager();
-        $resource = new Collection($articleList, new InterestCircleTransformer());
+        $resource = new Collection($articleList, new ArticleListTransformer());
         $resource->setPaginator(new IlluminatePaginatorAdapter($articleList));
         $data = $fractal->createData($resource)->toArray();
         $data['extra'] = [
@@ -203,6 +204,39 @@ class CircleController extends Controller
         return $data;
     }
 
+    /**
+     * 精品文章 推荐
+     */
+    public function articleRecommend(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'post_id' => 'required|integer',
+            'circle_id' => 'required|integer'
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return $this->circleArticleRepository->articleRecommend($request->all());
+    }
+
+    /**
+     * 移出精品文章
+     */
+    public function articleRemove(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'post_id' => 'required|integer',
+            'circle_id' => 'required|integer'
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return $this->circleArticleRepository->articleRemove($request->all());
+    }
+
+
+
+
 
     /**
      * 评论列表

+ 84 - 4
app/Repositories/Circle/CircleArticleRepository.php

@@ -10,6 +10,7 @@
 namespace App\Repositories\Circle;
 
 use App\Models\InterestCircleArticle;
+use App\Models\Post;
 use Illuminate\Database\QueryException;
 use Dingo\Api\Http\Response;
 use Illuminate\Support\Carbon;
@@ -20,9 +21,10 @@ use Illuminate\Support\Facades\Redis;
 class CircleArticleRepository
 {
 
-    public function __construct(InterestCircleArticle $interestCircleArticle)
+    public function __construct(InterestCircleArticle $interestCircleArticle, Post $post)
     {
         $this->interestCircleArticle = $interestCircleArticle;
+        $this->post = $post;
     }
 
     /**
@@ -37,13 +39,13 @@ class CircleArticleRepository
             $where[] = ['uid', $request['uid']];
         }
 
-        $articleModel = $this->interestCircleArticle;
+        $articleModel = $this->post;
 
         return $articleModel
-            ->join('post', 'post.id', '=', 'post_id')
             ->join('post_data', 'post_data.post_id', '=', 'post.id')
+            ->join('interest_circle_articles', 'interest_circle_articles.post_id', '=', 'post.id')
+            ->select('post.*', 'interest_circle_articles.is_recommend', 'interest_circle_articles.circle_id')
             ->with('data')
-            ->select('post.*')
             ->where($where)
             ->where(function ($query) use ($request) {
                 if (isset($request['content'])) {
@@ -60,4 +62,82 @@ class CircleArticleRepository
             ->orderBy('is_recommend', 'desc')
             ->paginate($perPage);
     }
+
+    /**
+     * 推荐精品文章
+     */
+    public function articleRecommend($request)
+    {
+        $article = $this->interestCircleArticle
+            ->where('post_id', $request['post_id'])
+            ->where('circle_id', $request['circle_id'])
+            ->first();
+        if (!$article) {
+            return Response::create([
+                'message' => '获取精品文章信息失败',
+                'status_code' => 500
+            ]);
+        }
+
+        if ($article->is_recommend == 1) {
+            $article->is_recommend = 0;
+        } else {
+            $article->is_recommend = 1;
+        }
+
+        DB::beginTransaction();
+        try {
+            $article->save();
+
+            DB::commit();
+            return Response::create();
+
+        } catch (QueryException $exception) {
+            DB::rollBack();
+            Log::debug('推荐精品文章:' . $request['post_id'] . '-' . $request['circle_id'] . $exception->getMessage());
+            return Response::create([
+                'message' => '操作失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code' => 500
+            ]);
+        }
+    }
+
+    /**
+     * 精品文章从当前圈子移出
+     */
+    public function articleRemove($request)
+    {
+        $article = $this->interestCircleArticle
+            ->where('post_id', $request['post_id'])
+            ->where('circle_id', $request['circle_id'])
+            ->first();
+        if (!$article) {
+            return Response::create([
+                'message' => '获取精品文章信息失败',
+                'status_code' => 500
+            ]);
+        }
+
+        DB::beginTransaction();
+        try {
+            $article->delete();
+            $isRef = $this->interestCircleArticle->where('post_id', $request['post_id'])->exists();
+            if (!$isRef) {
+                //todo 移出后需要检测该帖子在其他圈子有没有设为精品,如没有,则删除该帖子的精品标识
+                //$this->post->where('id',$request['post_id'])->update();
+            }
+            DB::commit();
+            return Response::create();
+
+        } catch (QueryException $exception) {
+            DB::rollBack();
+            Log::debug('移出精品文章:' . $request['post_id'] . '-' . $request['circle_id'] . $exception->getMessage());
+            return Response::create([
+                'message' => '操作失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code' => 500
+            ]);
+        }
+    }
 }

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

@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/6
+ * Time: 14:08
+ */
+namespace App\Transformers\Circle;
+
+use App\Models\Post;
+use App\Traits\PostTrait;
+use Illuminate\Support\Carbon;
+use League\Fractal\TransformerAbstract;
+
+class ArticleListTransformer extends TransformerAbstract
+{
+    use PostTrait;
+    public function transform(Post $post)
+    {
+        return [
+            'id' => $post['id'],
+            'created_at' => Carbon::parse($post['created_at'])->toDateTimeString(),
+            'uid' => $post['uid'],
+            'username' => $post['username'],
+            'avatar' => $post['avatar'],
+            'topic' => $this->getTopic($post['topic_ids'], 1),
+            'content' => subtext(strip_tags($post['content']), 20),
+            'pv' => $post->data->pv_real.'/'.$post->data->pv,
+            'praise_count' => $post->data->praise_real_count.'/'.$post->data->praise_count,
+            'share_count' => $post->data->share_real_count.'/'.$post->data->share_count,
+            'comment_count' => $post->data->comment_count,
+            'collect_count' => $post->data->collect_real_count.'/'.$post->data->collect_count,
+            'is_recommend' => $post['is_recommend'],
+            'circle_id' => $post['circle_id'],
+        ];
+    }
+}

+ 5 - 31
routes/api.php

@@ -189,40 +189,14 @@ $api->version('v1', [
         //圈子相册列表
         $api->get('circle/pictures', 'CircleController@pictureList');
         //删除相册图片
-        $api->delete('circle/picture/delete', 'CircleController@deletePicture');
+        $api->delete('circle/picture', 'CircleController@deletePicture');
         //圈子精品文章列表
         $api->get('circle/articles', 'CircleController@articleList');
+        //推荐精品文章
+        $api->put('circle/article/recommend', 'CircleController@articleRecommend');
+        //移出精品文章
+        $api->delete('circle/article', 'CircleController@articleRemove');
 
-        //推荐内容
-        $api->put('circle/suggest', 'PostController@suggest');
-
-        //隐藏内容
-        $api->put('circle/hide', 'PostController@hide');
-
-        //增加数据
-        $api->put('circle/addData', 'PostController@addData');
-
-        //评论列表
-        $api->get('circle/comment', 'PostController@commentList');
-        //评论&回复
-        $api->post('circle/comment', 'PostController@comment');
-        //删除评论
-        $api->delete('circle/comment/delete', 'PostController@commentDelete');
-
-        //回收站列表
-        $api->get('circle/waste', 'PostController@waste');
-        //回收站复原
-        $api->put('circle/waste', 'PostController@restore');
-
-        //日志列表
-        $api->get('circle/log', 'PostController@log');
-
-        //添加网站内容
-        $api->post('circle/store', 'PostController@createStore');
-        //获取网站内容
-        $api->get('circle/store', 'PostController@getStore');
-        //网站内容详情
-        $api->get('circle/store/detail', 'PostController@getStoreDetail');
 
     });
 });