Bläddra i källkod

新增热门视频,

zhangchangchun 5 år sedan
förälder
incheckning
8ac2873077

+ 96 - 0
app/Http/Controllers/V2/VideoGroupController.php

@@ -0,0 +1,96 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 9:35
+ */
+
+namespace App\Http\Controllers\V2;
+
+
+use App\Http\Controllers\Controller;
+use App\Repositories\V2\VideoGroupRepository;
+use App\Transformers\DetailVideoGroupTansformer;
+use App\Transformers\VideoGroupTransformer;
+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 VideoGroupController extends Controller {
+
+    public function __construct(VideoGroupRepository $videoGroupRepository) {
+        $this->videoGroupRepository = $videoGroupRepository;
+    }
+    //列表
+    public function index(Request $request){
+        $topicGroup = $this->videoGroupRepository->index($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($topicGroup, new VideoGroupTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($topicGroup));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'name',
+            ],
+            'columns' => [
+                'id',
+                'name',
+                'video_count',
+                'created_at',
+            ]
+        ];
+        return $data;
+    }
+    //创建
+    public function create(Request $request){
+        $data = $request->only('name');
+        $validator = Validator::make($data, [
+            'name' => 'required|string|max:12',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->videoGroupRepository->create($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);
+        }
+        $info = $this->videoGroupRepository->view($data);
+        return $this->response->item($info, new DetailVideoGroupTansformer());
+    }
+    //设置排序
+    public function edit(Request $request){
+        $data = $request->only('name','name','info');
+        $validator = Validator::make($data, [
+            'id' => 'required|integer|max:12',
+            'name' => 'required|string|max:12',
+            'info' => 'string'
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->videoGroupRepository->edit($data);
+    }
+    //添加分组内容
+    public function addVideoInfo(Request $request){
+        $data = $request->only('video_group_id','post_id');
+        $validator = Validator::make($data, [
+            'video_group_id' => 'required|integer|max:12',
+            'post_id' => 'required|integer|max:12',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->videoGroupRepository->addVideoInfo($data);
+    }
+}

+ 24 - 0
app/Models/VideoGroup.php

@@ -0,0 +1,24 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 9:30
+ */
+
+namespace App\Models;
+
+
+use Illuminate\Database\Eloquent\Model;
+
+class VideoGroup extends Model {
+    protected $table = 'video_group';
+
+    protected $guarded = ['id'];
+    protected $hidden = ['deleted_at'];
+
+    public function vgi()
+    {
+        return $this->hasMany('App\Models\videoGroupInfo','video_group_id','id');
+    }
+}

+ 20 - 0
app/Models/VideoGroupInfo.php

@@ -0,0 +1,20 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 9:31
+ */
+
+namespace App\Models;
+
+
+use Illuminate\Database\Eloquent\Model;
+
+class VideoGroupInfo extends Model {
+
+    protected $table = 'video_group_info';
+
+    protected $guarded = ['id'];
+    protected $hidden = ['deleted_at'];
+}

+ 2 - 0
app/Repositories/TopicGroupRepository.php

@@ -131,6 +131,8 @@ class TopicGroupRepository {
                     $this->topicGroupInfo->where(['topic_group_id'=>$topicGroup->id])->delete();
                 }
             }
+            DB::commit();
+            return Response::create();
         }catch (QueryException $exception){
             DB::rollBack();
             Log::debug('删除推荐话题组:'.$exception->getMessage());

+ 96 - 0
app/Repositories/V2/VideoGroupRepository.php

@@ -0,0 +1,96 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 10:10
+ */
+
+namespace App\Repositories\V2;
+
+
+use App\Models\VideoGroup;
+use App\Models\VideoGroupInfo;
+use Dingo\Api\Http\Response;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Database\QueryException;
+use Illuminate\Support\Facades\Log;
+
+class VideoGroupRepository {
+    public function __construct(VideoGroup $videoGroup,VideoGroupInfo $videoGroupInfo) {
+        $this->videoGroup = $videoGroup;
+        $this->videoGroupInfo = $videoGroupInfo;
+    }
+    //列表
+    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->videoGroup->where($where)->paginate($perPage);
+    }
+    //详情
+    public function view($request){
+        return $this->videoGroup->where(['id'=>$request['id']])->first();
+    }
+    //创建
+    public function create($request){
+        $videoGroup = $this->videoGroup->where(['name'=>$request['name']])->first();
+        if($videoGroup){
+            return Response::create([
+                'message'  => '该分组已存在',
+                'status_code'   => 500
+            ]);
+        }
+        $data = [
+            'name' => $request['name'],
+            'status' => 1,
+        ];
+        DB::beginTransaction();
+        try{
+            $this->videoGroup->create($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){
+        $videoGroup = $this->videoGroup->where(['id'=>$request['id']])->first();
+        if(!$videoGroup){
+            return Response::create([
+                'message'  => '该分组不存在',
+                'status_code'   => 500
+            ]);
+        }
+        $videoGroup->name = $request['name'];
+        $videoGroup->save();
+    }
+    //视频详情
+    public function videoList($video_group_id){
+       return $this->videoGroupInfo->where(['video_group_id'=>$video_group_id])->get();
+    }
+    //添加分组视频
+    public function addVideoInfo($request){
+        $videoGroup = $this->videoGroup->where(['video_group_id'=>$request['video_group_id']])->first();
+        if(!$videoGroup){
+            return Response::create([
+                'message'  => '该分组不存在',
+                'status_code'   => 500
+            ]);
+        }
+        $data = [
+            'video_group_id'=>$request['video_group_id'],
+            'post_id'=>$request['post_id']
+        ];
+        return $this->videoGroupInfo->create($data);
+    }
+}

+ 32 - 0
app/Transformers/DetailVideoGroupTansformer.php

@@ -0,0 +1,32 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 10:45
+ */
+
+namespace App\Transformers;
+use App\Models\VideoGroup;
+use League\Fractal\TransformerAbstract;
+
+
+class DetailVideoGroupTansformer extends TransformerAbstract{
+    public function transform(VideoGroup $videoGroup)
+    {
+        $video = $this->getVideoInfoList();
+        return [
+            'id' => $videoGroup['id'],
+            'name' => $videoGroup['name'],
+            'created_at' => Carbon::parse($videoGroup['created_at'])->toDateTimeString(),
+            'video_list'=>$video
+        ];
+    }
+    public function getVideoInfoList(VideoGroup $videoGroup){
+        $video = [];
+        foreach ($videoGroup->vgi as $key=>$value){
+            $video[] = $value;
+        }
+        return $video;
+    }
+}

+ 30 - 0
app/Transformers/VideoGroupTransformer.php

@@ -0,0 +1,30 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 10:27
+ */
+
+namespace App\Transformers;
+
+
+use App\Models\VideoGroup;
+use League\Fractal\TransformerAbstract;
+
+class VideoGroupTransformer extends TransformerAbstract {
+
+    public function transform(VideoGroup $videoGroup)
+    {
+        $video = [];
+        foreach ($videoGroup->vgi as $key=>$value){
+            $video[] = $value;
+        }
+        return [
+            'id' => $videoGroup['id'],
+            'name' => $videoGroup['name'],
+            'created_at' => Carbon::parse($videoGroup['created_at'])->toDateTimeString(),
+            'video_count'=>count($video)
+        ];
+    }
+}