wzq 5 年 前
コミット
d496c25ab2

+ 40 - 0
app/Http/Controllers/Post/PostController.php

@@ -9,6 +9,7 @@
 namespace App\Http\Controllers\Post;
 
 use App\Repositories\Post\PostRepository;
+use App\Transformers\Post\PostTransformer;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
 use App\Http\Controllers\Controller;
@@ -24,6 +25,44 @@ class PostController extends Controller
         $this->postRepository = $postRepository;
     }
 
+    /**
+     * 内容列表
+     */
+    public function index(Request $request)
+    {
+        $productList = $this->postRepository->lists($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($productList, new PostTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($productList));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'keyword',
+                'category_id1',
+                'up_status',
+                'total_stock',
+                'shop_id',
+                'is_delete'
+            ],
+            'columns' => [
+                'id',
+                'created_at',
+                'uid',
+                'topic',
+                'content',
+                'location',
+                'pv',
+                'praise_count',
+                'share_count',
+                'comment_count',
+                'collect_count',
+                'will_collect_bean',
+                'is_suggest'
+            ]
+        ];
+        return $data;
+    }
+
     /**
      * 发布内容
      */
@@ -32,6 +71,7 @@ class PostController extends Controller
         $validator = Validator::make($request->all(), [
             'uid' => 'required|integer',
             'type' => ['required',Rule::in('image', 'video', 'text')],
+            'is_suggest' => ['required',Rule::in(0, 1)],
             'img' => 'required|url',
             'video' => 'required_if:type,video|string|url',
             'topic_ids' => 'required|string|max:64',

+ 15 - 0
app/Models/Post.php

@@ -17,4 +17,19 @@ class Post extends Model
     protected $table = 'post';
     protected $guarded = [];
 
+    public function imgs()
+    {
+        return $this->hasMany('App\Models\PostImgs', 'post_id', 'id');
+    }
+
+    public function data()
+    {
+        return $this->hasOne('App\Models\PostData', 'post_id', 'id');
+    }
+
+    public function topic()
+    {
+        return Topic::whereIn('id', explode(',', $this->topic_ids))->pluck('name', 'id');
+    }
+
 }

+ 29 - 2
app/Repositories/Post/PostRepository.php

@@ -67,7 +67,7 @@ class PostRepository
             'title' => $request['title']??'',
             'content' => $request['content'],
             'location' => $request['location']??'',
-            'is_suggest' => 0,
+            'is_suggest' => $request['is_suggest'],
             'is_hide' => 0
         ];
 
@@ -97,7 +97,7 @@ class PostRepository
                 'weight' => 0
             ]);
 
-            if($request['imgs'] && $request['type'] == 'image'){
+            if(!empty($request['imgs']) && $request['type'] == 'image'){
                 $imgData = [];
                 foreach($request['imgs'] as $img){
                     $imgData[] = [
@@ -124,4 +124,31 @@ class PostRepository
         }
     }
 
+    /**
+     * 内容列表
+     */
+    public function lists($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+        $where = [];
+        if(isset($request['up_status'])){
+            $where[] = ['up_status', $request['up_status']];
+        }
+        if(isset($request['total_stock'])){
+            $where[] = ['total_stock', $request['total_stock']];
+        }
+        if(isset($request['category_id1'])){
+            $where[] = ['category_id1', $request['category_id1']];
+        }
+
+        return $this->post->where($where)
+            ->where(function($query) use ($request){
+                if(isset($request['keyword'])){
+                    $query->where('name', 'like', "%{$request['keyword']}%")
+                        ->orWhere('spu_code', 'like', "%{$request['keyword']}%");
+                }
+            })
+            ->paginate($perPage);
+    }
+
 }

+ 41 - 0
app/Transformers/Post/PostTransformer.php

@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/6
+ * Time: 14:08
+ */
+namespace App\Transformers\Post;
+
+use App\Models\Post;
+use Illuminate\Support\Carbon;
+use League\Fractal\TransformerAbstract;
+
+class PostTransformer extends TransformerAbstract
+{
+    public function transform(Post $post)
+    {
+        $imgs = [];
+        foreach($post->imgs as $img){
+            $imgs[] = $img;
+        }
+        return [
+            'id' => $post['id'],
+            'created_at' => Carbon::parse($post['created_at'])->toDateTimeString(),
+            'uid' => $post['uid'],
+            'username' => $post['username'],
+            'avatar' => $post['avatar'],
+            'topic' => $post->topic(),
+            'content' => $post['content'],
+            'location' => $post['location'],
+            'pv' => $post->data->pv,
+            'praise_count' => $post->data->praise_count,
+            'share_count' => $post->data->share_count,
+            'comment_count' => $post->data->comment_count,
+            'collect_count' => $post->data->collect_count,
+            'will_collect_bean' => $post->data->will_collect_bean,
+            'is_suggest' => $post['is_suggest'],
+        ];
+    }
+}

+ 1 - 0
resources/lang/zh-CN/validation.php

@@ -102,6 +102,7 @@ return [
     'attributes' => [
         'uid' => '用户uid',
         'type' => '类型',
+        'is_suggest' => '是否推荐',
         'img' => '图片',
         'video' => '视频',
         'topic_ids' => '话题id',

+ 2 - 0
routes/api.php

@@ -36,6 +36,8 @@ $api->version('v1', [
     $api->group(['namespace' => 'Post'], function ($api) {
         //发布内容
         $api->post('post', 'PostController@create');
+        //内容列表
+        $api->get('post', 'PostController@index');
     });
 
     $api->group(['middleware' => 'jwt.chxq_auth'], function ($api) {