Explorar el Código

Merge remote-tracking branch 'origin/develop' into develop

wzq hace 5 años
padre
commit
3515ab1ffd

+ 85 - 0
app/Http/Controllers/CategoryController.php

@@ -0,0 +1,85 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-10
+ * Time: 17:38
+ */
+
+namespace App\Http\Controllers;
+
+use App\Repositories\CategoryRepository;
+use App\Transformers\CategoryTransformer;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Validator;
+use Illuminate\Validation\Rule;
+use App\Transformers\DetailCategoryTransformer;
+use League\Fractal\Manager;
+use League\Fractal\Pagination\IlluminatePaginatorAdapter;
+use League\Fractal\Resource\Collection;
+use League\Fractal\Resource\Item;
+
+class CategoryController extends Controller {
+
+    public function __construct(CategoryRepository $categoryRepository)
+    {
+        $this->categroupRepository = $categoryRepository;
+    }
+    //创建
+    public function create(Request $request){
+      $validator = Validator::make($request->all(), [
+          'name' => 'required|string|max:12',
+          'img' => 'required|url',
+          'desc' => 'required|string|max:100',
+          'topic_ids' => 'string',
+      ]);
+      if ($validator->fails()) {
+          return $this->response->error($validator->errors()->first(), 500);
+      }
+      return  $this->categroupRepository->create($request->all());
+    }
+    //列表
+    public function index(Request $request){
+        $categroup = $this->categroupRepository->index($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($categroup, new CategoryTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($categroup));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'name',
+            ],
+            'columns' => [
+                'id',
+                'name',
+                'img',
+                'created_at',
+                'is_suggest',
+            ]
+        ];
+        return $data;
+    }
+    public function view(Request $request){
+        $data = $request->only('id');
+        $validator = Validator::make($data, [
+            'id' => 'required|integer|max:12',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        $categroup = $this->categroupRepository->view($data);
+        return $this->response->item($categroup, new DetailCategoryTransformer());
+    }
+    //设置推荐
+    public function isSuggest(Request $request){
+        $data = $request->only('id','is_suggest');
+        $validator = Validator::make($data, [
+            'id' => 'required|string|max:12',
+            'is_suggest' => ['required',Rule::in(0, 1)],
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->categroupRepository->update($data);
+    }
+}

+ 90 - 0
app/Http/Controllers/TopicController.php

@@ -0,0 +1,90 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-10
+ * Time: 18:09
+ */
+
+namespace App\Http\Controllers;
+
+use App\Models\Topic;
+use App\Repositories\CategoryRepository;
+use App\Repositories\TopicRepository;
+use App\Transformers\TopicTransformer;
+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;
+use Illuminate\Validation\Rule;
+
+
+class TopicController extends Controller {
+
+    public function __construct(CategoryRepository $categoryRepository,TopicRepository $topicRepository)
+    {
+        $this->categroupRepository = $categoryRepository;
+        $this->topicRepository = $topicRepository;
+    }
+    //列表
+    public function index(Request $request){
+        $topic= $this->topicRepository->index($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($topic, new TopicTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($topic));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'name',
+            ],
+            'columns' => [
+                'id',
+                'name',
+                'img',
+                'created_at',
+                'is_suggest',
+                'is_hot',
+                'is_open',
+            ]
+        ];
+        return $data;
+    }
+    //添加
+    public function create(Request $request){
+        $validator = Validator::make($request->all(), [
+            'name' => 'required|string|max:12',
+            'img' => 'required|url',
+            'desc' => 'required|string|max:100',
+            'category_ids' => 'required|string',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->topicRepository->create($request->all());
+    }
+    //开启
+    public function isOpen(Request $request) {
+        $validator = Validator::make($request->all(), [
+            'id' => 'integer|string|max:12',
+            'is_open' => ['required', Rule::in(0, 1)]
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->topicRepository->update($request->all());
+    }
+    //开启
+    public function setStatus(Request $request) {
+        $validator = Validator::make($request->all(), [
+            'id' => 'integer|string|max:12',
+            'type'=>['required', Rule::in(1, 2)],
+            'status' => ['required', Rule::in(0, 1)],
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->topicRepository->update($request->all());
+    }
+}

+ 5 - 0
app/Models/Category.php

@@ -13,4 +13,9 @@ class Category extends Model
     //
     protected $table = 'category';
     protected $guarded = [];
+
+    public function ct()
+    {
+        return $this->hasMany('App\Models\CategoryTopic','category_id','id');
+    }
 }

+ 10 - 0
app/Models/CategoryTopic.php

@@ -13,4 +13,14 @@ class CategoryTopic extends Model
     //
     protected $table = 'category_topic';
     protected $guarded = [];
+    //话题
+    public function topic()
+    {
+        return $this->hasOne('App\Models\Topic', 'id', 'topic_id');
+    }
+    //分类
+    public function category()
+    {
+        return $this->hasOne('App\Models\Category', 'id', 'category_id');
+    }
 }

+ 5 - 0
app/Models/Topic.php

@@ -14,4 +14,9 @@ class Topic extends Model
     //
     protected $table = 'topic';
     protected $guarded = [];
+
+    public function ct()
+    {
+        return $this->hasMany('App\Models\CategoryTopic','topic_id','id');
+    }
 }

+ 90 - 0
app/Repositories/CategoryRepository.php

@@ -0,0 +1,90 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-10
+ * Time: 17:40
+ */
+namespace App\Repositories;
+
+use App\Models\Category;
+use App\Models\CategoryTopic;
+use Dingo\Api\Http\Response;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Database\QueryException;
+
+class CategoryRepository {
+    public function __construct(Category $category,CategoryTopic $categoryTopic){
+        $this->category = $category;
+        $this->categoryTopic = $categoryTopic;
+    }
+    //列表
+    public function index($request){
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+        $where = [];
+        if(isset($request['name'])){
+            $where[] = ['name', 'like', "%{$request['name']}%"];
+        }
+        return $this->category->where($where)->paginate($perPage);
+    }
+    //详情
+    public function view($request){
+        return $this->category->where(['id'=>$request['id']])->first();
+    }
+    //创建
+    public function create($request){
+        $category = $this->category->where(['name'=>$request['name']])->first();
+        if($category){
+            return Response::create([
+                'message'  => '该分类已存在',
+                'status_code'   => 500
+            ]);
+        }
+        $data = [
+            'name' => $request['name'],
+            'img' => $request['img'],
+            //'is_suggest' => $request['is_suggest'],
+            'desc' => $request['desc'],
+        ];
+        if(!empty($request['topic_ids'])){
+            $topic_ids = explode(',', $request['topic_ids']);
+        }
+        DB::beginTransaction();
+        try{
+            $categoryInfo = $this->category->create($data);
+            if($categoryInfo){
+                if($topic_ids){
+                    $category_topic_data = [];
+                    foreach($topic_ids as $value){
+                        $category_topic_data[] = [
+                            'category_id' => $categoryInfo->id,
+                            'topic_id' => $value,
+                        ];
+                    }
+                    $this->categoryTopic->insert($category_topic_data);
+                }
+            }
+            DB::commit();
+            return Response::create();
+        }catch (QueryException $exception){
+            DB::rollBack();
+            Log::debug('新增话题分组:'.$exception->getMessage());
+            return Response::create([
+                'message'  => '新增话题失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+    }
+    //修改
+    public function update($request){
+        $category = $this->category->where('id', $request['id'])->first();
+        if(isset($request['is_suggest']) && $request['is_suggest'] !== null){
+            $category->is_suggest = $request['is_suggest'];
+        }
+        $res = $category->save();
+        if($res){
+            return Response::create();
+        }
+    }
+}

+ 108 - 0
app/Repositories/TopicRepository.php

@@ -0,0 +1,108 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-10
+ * Time: 18:12
+ */
+
+namespace App\Repositories;
+
+use App\Models\Category;
+use App\Models\CategoryTopic;
+use App\Models\Topic;
+use Dingo\Api\Http\Response;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Database\QueryException;
+
+class TopicRepository {
+    public function __construct(Topic $topic,CategoryTopic $categoryTopic){
+        $this->topic = $topic;
+        $this->categoryTopic = $categoryTopic;
+    }
+    //列表
+    public function index($request){
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+        $where = [];
+        if(isset($request['name'])){
+            $where[] = ['name', 'like', "%{$request['name']}%"];
+        }
+        return $this->topic->where($where)->paginate($perPage);
+    }
+    public function create($request){
+        $topic = $this->topic->where(['name'=>$request['name']])->first();
+        if($topic){
+            return Response::create([
+                'message'  => '该话题已存在',
+                'status_code'   => 500
+            ]);
+        }
+
+        $data = [
+            'name' => $request['name'],
+            'img' => $request['img'],
+            'desc' => $request['desc'],
+        ];
+        if(isset($request['category_ids'])){
+            $category_ids = explode(',', $request['category_ids']);
+        }
+        DB::beginTransaction();
+        try{
+            $topicInfo = $this->topic->create($data);
+            if($topicInfo){
+                if($category_ids){
+                    $category_topic_data = [];
+                    foreach($category_ids as $value){
+                        $category_topic_data[] = [
+                            'category_id' => $value,
+                            'topic_id' => $topicInfo->id,
+                        ];
+                    }
+                    $this->categoryTopic->insert($category_topic_data);
+                }
+            }
+            DB::commit();
+            return Response::create();
+        }catch (QueryException $exception){
+            DB::rollBack();
+            Log::debug('新增话题:'.$exception->getMessage());
+            return Response::create([
+                'message'  => '新增话题,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+    }
+    //修改
+    public function update($request){
+        $topic = $this->topic->where('id', $request['id'])->first();
+        if(!$topic){
+            return Response::create([
+                'message'  => '该话题不存在',
+                'status_code'   => 500
+            ]);
+        }
+        if(isset($request['is_open']) && $request['is_open'] !== null){
+            $topic->is_open = $request['is_open'];
+        }
+        if($request['type']){
+            if($topic->is_open == 0){
+                return Response::create([
+                    'message'  => '该话题未开启',
+                    'status_code'   => 500
+                ]);
+            }
+            if(isset($request['type']) == 1){
+                $topic->is_suggest = $request['is_suggest'];
+            }
+            if(isset($request['type']) == 2){
+                $topic->is_hot = $request['is_hot'];
+            }
+        }
+
+        $res = $topic->save();
+        if($res){
+            return Response::create();
+        }
+    }
+}

+ 31 - 0
app/Transformers/CategoryTransformer.php

@@ -0,0 +1,31 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-10
+ * Time: 18:47
+ */
+namespace App\Transformers;
+use App\Models\Category;
+use League\Fractal\TransformerAbstract;
+use Illuminate\Support\Carbon;
+
+class CategoryTransformer extends TransformerAbstract{
+    public function transform(Category $category)
+    {
+        $topic = [];
+        foreach ($category->ct as $key=>$value){
+            $topic[] = $value->topic;
+        }
+        return [
+            'id' => $category['id'],
+            'name' => $category['name'],
+            'img' => $category['img'],
+            'is_suggest' => $category['is_suggest'],
+            'desc' => $category['desc'],
+            'created_at' => Carbon::parse($category['created_at'])->toDateTimeString(),
+            'topic_list'=>$topic,
+            'topic_count'=>count($topic)
+        ];
+    }
+}

+ 34 - 0
app/Transformers/DetailCategoryTransformer.php

@@ -0,0 +1,34 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-10
+ * Time: 19:06
+ */
+
+namespace App\Transformers;
+
+use League\Fractal\TransformerAbstract;
+use App\Models\Category;
+use Illuminate\Support\Carbon;
+
+class DetailCategoryTransformer extends TransformerAbstract{
+
+    public function transform(Category $category)
+    {
+        $topic = [];
+        foreach ($category->ct as $key=>$value){
+            $topic[] = $value->topic;
+        }
+        return [
+            'id' => $category['id'],
+            'name' => $category['name'],
+            'img' => $category['img'],
+            'is_suggest' => $category['is_suggest'],
+            'desc' => $category['desc'],
+            'created_at' => Carbon::parse($category['created_at'])->toDateTimeString(),
+            'topic_list'=>$topic,
+            'topic_count'=>count($topic)
+        ];
+    }
+}

+ 33 - 0
app/Transformers/TopicTransformer.php

@@ -0,0 +1,33 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-10
+ * Time: 18:47
+ */
+namespace App\Transformers;
+use App\Models\Topic;
+use League\Fractal\TransformerAbstract;
+use Illuminate\Support\Carbon;
+
+class TopicTransformer extends TransformerAbstract{
+
+    public function transform(Topic $topic)
+    {
+        $category = [];
+        foreach ($topic->ct as $key=>$value){
+            $category[] = $value->category;
+        }
+        return [
+            'id' => $topic['id'],
+            'name' => $topic['name'],
+            'img' => $topic['img'],
+            'is_suggest' => $topic['is_suggest'],
+            'is_hot' => $topic['is_hot'],
+            'is_open' => $topic['is_open'],
+            'desc' => $topic['desc'],
+            'created_at' => Carbon::parse($topic['created_at'])->toDateTimeString(),
+            'category_list'=>$category,
+        ];
+    }
+}

+ 15 - 0
routes/api.php

@@ -59,5 +59,20 @@ $api->version('v1', [
             $api->get('post/log', 'PostController@log');
 
         });
+        //新增话题分类
+        $api->post('categoryCreate', 'CategoryController@create');
+        //话题分类列表
+        $api->get('categoryIndex', 'CategoryController@index');
+        //话题分类详情
+        $api->get('categoryView', 'CategoryController@view');
+        //推荐分类
+        $api->put('categoryIsSuggest', 'CategoryController@isSuggest');
+        //编辑话题
+        $api->put('categoryEdit', 'CategoryController@edit');
+        //新增话题
+        $api->post('topicCreate', 'TopicController@create');
+        //列表
+        $api->get('topicIndex', 'TopicController@index');
+
     });
 });