소스 검색

推荐话题

zhangchangchun 5 년 전
부모
커밋
5acc2f5d18

+ 0 - 32
app/Http/Controllers/V2/TopicGroup.php

@@ -1,32 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2019-06-10
- * Time: 16:44
- */
-
-namespace App\Http\Controllers\V2;
-
-use App\Http\Controllers\Controller;
-use Illuminate\Http\Request;
-
-class TopicGroup extends Controller {
-    //列表
-    public function index(Request $request){
-
-    }
-    //创建
-    public function create(Request $request){
-        $request->only('name','img','topic_ids','desc');
-    }
-    //修改
-    public function edit(Request $request){
-        $request->only('id','name','img','topic_ids','desc');
-    }
-    //关闭
-    public function isOpen(Request $request){
-        $request->only('id','status');
-    }
-
-}

+ 88 - 0
app/Http/Controllers/V2/TopicGroupController.php

@@ -0,0 +1,88 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-10
+ * Time: 16:44
+ */
+
+namespace App\Http\Controllers\V2;
+
+use App\Http\Controllers\Controller;
+use App\Repositories\TopicGroupRepository;
+use App\Transformers\DetailTopicGroupTransformer;
+use App\Transformers\DetailTopicTransformer;
+use App\Transformers\TopicGroupTransformer;
+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 TopicGroupController extends Controller {
+    public function __construct(TopicGroupRepository $topicGroupRepository)
+    {
+        $this->topicGroupRepository = $topicGroupRepository;
+    }
+    //列表
+    public function index(Request $request){
+        $topicGroup = $this->topicGroupRepository->index($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($topicGroup, new TopicGroupTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($topicGroup));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'name',
+            ],
+            'columns' => [
+                'id',
+                'name',
+                'img',
+                'created_at',
+                'is_suggest',
+                'topic_count',
+                'topic_list'
+            ]
+        ];
+        return $data;
+    }
+    //创建
+    public function create(Request $request){
+        $data = $request->only('name','img','topic_ids','desc');
+        $validator = Validator::make($data, [
+            'name' => 'required|string|max:12',
+            'topic_ids' => 'required|string',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->topicGroupRepository->create($data);
+    }
+    //修改
+    public function edit(Request $request){
+        $data = $request->only('id','name','img','topic_ids','desc');
+        $validator = Validator::make($data, [
+            'name' => 'required|string|max:12',
+            'topic_ids' => 'required|string',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->topicGroupRepository->edit($data);
+    }
+    //详情
+    public function view(Request $request){
+        $data = $request->only('id','status');
+        $validator = Validator::make($data, [
+            'id' => 'required|integer|max:12',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        $info = $this->topicGroupRepository->view($data);
+        return $this->response->item($info, new DetailTopicGroupTransformer());
+    }
+
+}

+ 7 - 1
app/Models/TopicGroup.php

@@ -12,7 +12,13 @@ namespace App\Models;
 use Illuminate\Database\Eloquent\Model;
 
 class TopicGroup extends Model {
-    protected $guarded = ['id'];
+    protected $table = 'topic_group';
 
+    protected $guarded = ['id'];
     protected $hidden = ['deleted_at'];
+
+    public function ct()
+    {
+        return $this->hasMany('App\Models\TopicGroupInfo','topic_group_id','id');
+    }
 }

+ 2 - 1
app/Models/TopicGroupInfo.php

@@ -12,7 +12,8 @@ namespace App\Models;
 use Illuminate\Database\Eloquent\Model;
 
 class TopicGroupInfo extends Model {
-    protected $guarded = ['id'];
+    protected $table = 'topic_group_info';
 
+    protected $guarded = ['id'];
     protected $hidden = ['deleted_at'];
 }

+ 106 - 1
app/Repositories/TopicGroupRepository.php

@@ -10,9 +10,114 @@ namespace App\Repositories;
 
 
 use App\Models\TopicGroup;
+use App\Models\TopicGroupInfo;
+use Dingo\Api\Http\Response;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Database\QueryException;
+use Illuminate\Support\Facades\Log;
 
 class TopicGroupRepository {
-    public function __construct(TopicGroup $topicGroup) {
+    public function __construct(TopicGroup $topicGroup,TopicGroupInfo $topicGroupInfo) {
         $this->topicGroup = $topicGroup;
+        $this->topicGroupInfo = $topicGroupInfo;
+    }
+    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->topicGroup->where($where)->paginate($perPage);
+    }
+    //添加
+    public function create($request){
+        $category = $this->topicGroup->where(['name'=>$request['name']])->first();
+        if($category){
+            return Response::create([
+                'message'  => '该分组已存在',
+                'status_code'   => 500
+            ]);
+        }
+        $data = [
+            'name' => $request['name'],
+            'status' => 1,
+        ];
+        if(!empty($request['topic_ids'])){
+            $topic_ids = explode(',', $request['topic_ids']);
+        }
+        DB::beginTransaction();
+        try{
+            $topicGroup = $this->topicGroup->create($data);
+            if($topicGroup){
+                if($topic_ids){
+                    $topic_group_inof_data = [];
+                    foreach($topic_ids as $value){
+                        $topic_group_inof_data[] = [
+                            'topic_group_id' => $topicGroup->id,
+                            'topic_id' => $value,
+                        ];
+                    }
+                    $this->topicGroupInfo->insert($topic_group_inof_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 edit($request){
+        $topicGroup = $this->topicGroup->where(['id'=>$request['id']])->first();
+        if(!$topicGroup){
+            return Response::create([
+                'message'  => '该话题组不存在',
+                'status_code'   => 500
+            ]);
+        }
+        $topicGroup->name = $request['name'];
+
+        if(!empty($request['topic_ids'])){
+            $topic_ids = explode(',', $request['topic_ids']);
+        }
+        DB::beginTransaction();
+        try{
+            $topicGroupInfo = $topicGroup->save();
+            if($topicGroupInfo){
+                //删除
+                $this->topicGroupInfo->where(['topic_group_id'=>$topicGroup->id])->delete();
+                if($topic_ids){
+                    $category_topic_data = [];
+                    foreach($topic_ids as $value){
+                        $category_topic_data[] = [
+                            'topic_group_id' => $topicGroup->id,
+                            'topic_id' => $value,
+                        ];
+                    }
+                    $this->topicGroupInfo->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 view($request){
+       return $this->topicGroup->where(['id'=>$request['id']])->first();
     }
 }

+ 28 - 0
app/Transformers/DetailTopicGroupTransformer.php

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

+ 28 - 0
app/Transformers/TopicGroupTransformer.php

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

+ 2 - 2
database/migrations/2019_06_04_023043_create_topic_gourp_info_table.php

@@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;
 
-class CreateTopicGourpInfoTable extends Migration
+class CreateTopicGroupInfoTable extends Migration
 {
     /**
      * Run the migrations.
@@ -13,7 +13,7 @@ class CreateTopicGourpInfoTable extends Migration
      */
     public function up()
     {
-        Schema::create('topic_gourp_info', function (Blueprint $table) {
+        Schema::create('topic_group_info', function (Blueprint $table) {
             $table->bigIncrements('id');
             $table->integer('topic_group_id')->nullable()->comment('话题分组id');
             $table->integer('topic_id')->nullable()->comment('话题id');

+ 8 - 0
routes/api.php

@@ -104,5 +104,13 @@ $api->version('v1', [
         });
         //banner专题计数
         $api->post('count_subject', 'CmsContentTemplateSetController@count_subject');
+        //新增推荐话题
+        $api->post('TopicGroupCreate', 'TopicGroupController@create');
+        //推荐话题组列表
+        $api->get('TopicGroupIndex', 'TopicGroupController@index');
+        //推荐话题组编辑
+        $api->put('TopicGroupEdit', 'TopicGroupController@edit');
+        //详情
+        $api->get('TopicGroupView', 'TopicGroupController@view');
     });
 });