wesmiler 2 лет назад
Родитель
Сommit
6ddbe1efeb

+ 21 - 0
app/Http/Controllers/Api/v1/LiveCategoryController.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Http\Controllers\Api\v1;
+use App\Http\Controllers\Api\webApp;
+use App\Services\Api\LiveCategoryService;
+
+/**
+ * 直播分类
+ * @package App\Http\Controllers\Api\v1
+ */
+class LiveCategoryController extends webApp
+{
+    /**
+     * 分类
+     * @return array
+     */
+    public function options()
+    {
+        return message(1010,true, LiveCategoryService::make()->options());
+    }
+}

+ 14 - 2
app/Http/Controllers/Api/v1/LiveController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers\Api\v1;
 use App\Http\Controllers\Api\webApp;
+use App\Http\Validator\LiveValidator;
 use App\Services\LiveService;
 
 /**
@@ -25,8 +26,19 @@ class LiveController extends webApp
      * 创建直播间(开启直播)
      * @return array
      */
-    public function create()
+    public function create(LiveValidator $validator)
     {
-        return message(1002, true, []);
+
+        $params = request()->all();
+        $params = $validator->check($params, 'create');
+        if (!is_array($params)) {
+            return message($params, false);
+        }
+
+        if(!LiveService::make()->create($this->userId, $params)){
+            return message(LiveService::make()->getError(),false);
+        }else{
+            return message(1010,true);
+        }
     }
 }

+ 52 - 0
app/Http/Validator/LiveValidator.php

@@ -0,0 +1,52 @@
+<?php
+namespace App\Http\Validator;
+class LiveValidator extends BaseValidator
+{
+    // 当前模型所有验证规则
+    public static $rules = [
+        'id' => 'required',
+        'title' => 'required|max:200',
+        'description' => 'string:max:200',
+        'push_url' => 'required|max:200',
+        'play_url' => 'required:max:200',
+        'type' => 'required',
+    ];
+
+    // 当前模型所有错误提示信息
+    public static $msgs = [
+        'required' => ':attribute不能为空',
+        'string' => ':attribute必须是字符串',
+        'min' => ':attribute长度不能小于:min位',
+        'max' => ':attribute长度不能大于:max位',
+        'exists' => ':attribute不存在',
+        'rule' => ':attribute格式不正确',
+    ];
+
+    // 当前模型所有验证字段
+    public static $fields = [
+        'id' => 'ID',
+        'push_url' => '直播推流地址',
+        'play_url' => '直播播放地址',
+        'title' => '直播主题',
+        'description' => '直播内容',
+        'category' => '直播内容分类',
+        'type' => '直播类型',
+    ];
+
+    // 当前模型所有验证场景
+    public static $scenes = [
+        'info'=> ['id'],
+        'create'=> ['description','push_url','play_url','category','type'],
+    ];
+
+    /**
+     * 验证
+     * @param $request
+     * @param string $scene
+     * @return int|mixed
+     */
+    public static function check($request, $scene=''){
+        $validator = new BaseValidator(self::$rules, self::$msgs, self::$fields, self::$scenes);
+        return $validator->checkParams($request, $scene);
+    }
+}

+ 24 - 0
app/Models/LiveCategoryModel.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 直播分类-模型
+ * @author laravel开发员
+ * @since 2020/11/11
+ * @package App\Models
+ */
+class LiveCategoryModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'live_category';
+}

+ 24 - 0
app/Models/LiveModel.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 直播-模型
+ * @author laravel开发员
+ * @since 2020/11/11
+ * @package App\Models
+ */
+class LiveModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'live';
+}

+ 93 - 0
app/Services/Api/LiveCategoryService.php

@@ -0,0 +1,93 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Services\Api;
+
+use App\Models\LiveCategoryModel;
+use App\Services\BaseService;
+use App\Services\RedisService;
+
+/**
+ * 直播分类管理-服务类
+ * @author laravel开发员
+ * @since 2020/11/11
+ * @package App\Services\Api
+ */
+class LiveCategoryService extends BaseService
+{
+    // 静态对象
+    protected static $instance = null;
+
+    /**
+     * 构造函数
+     * @author laravel开发员
+     * @since 2020/11/11
+     * GoodsCategoryService constructor.
+     */
+    public function __construct()
+    {
+        $this->model = new LiveCategoryModel();
+    }
+
+    /**
+     * 静态入口
+     * @return static|null
+     */
+    public static function make()
+    {
+        if (!self::$instance) {
+            self::$instance = (new static());
+        }
+        return self::$instance;
+    }
+
+    public function search($params)
+    {
+
+    }
+
+    /**
+     * 分类
+     * @return array|mixed
+     */
+    public function options()
+    {
+        $cacheKey = "caches:live:categorys";
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
+        }
+
+        $categorys = [];
+        $datas = $this->model->where(['status'=>1,'mark'=>1])
+            ->select(['id','pid','name','name_sk','name_fr','name_ind','name_en','name_jap','name_mal','name_vie','name_tha','status'])
+            ->orderBy('sort','desc')
+            ->orderBy('id','asc')
+            ->get();
+        $datas = $datas? $datas->toArray() : [];
+        if($datas){
+            foreach($datas as $item){
+                $item['checked'] = false;
+                $item['children'] = [];
+                $categorys[$item['id']] = $item;
+                if($item['pid']){
+                    $categorys[$item['pid']]['children'] = isset($categorys[$item['pid']]['children'])? $categorys[$item['pid']]['children'] : [];
+                    $categorys[$item['pid']]['children'][] = $item;
+                }
+            }
+
+            RedisService::set($cacheKey, $categorys, 3600);
+        }
+
+        return $categorys;
+    }
+
+}

+ 7 - 0
app/Services/LiveService.php

@@ -91,4 +91,11 @@ class LiveService extends BaseService
             'play_urls'=> $playUrls,
         ];
     }
+
+    public function create($userId, $params)
+    {
+       $data = [
+           ''
+       ];
+    }
 }

+ 2 - 0
routes/api.php

@@ -49,6 +49,8 @@ Route::prefix('v1')->group(function(){
     // 直播
     Route::get('/live/url', [\App\Http\Controllers\Api\v1\LiveController::class, 'getUrl']);
     Route::post('/live/create', [\App\Http\Controllers\Api\v1\LiveController::class, 'create']);
+    Route::post('/live/info', [\App\Http\Controllers\Api\v1\LiveController::class, 'info']);
+    Route::post('/live/category', [\App\Http\Controllers\Api\v1\LiveCategoryController::class, 'options']);
 
     // 会员板块
     Route::post('/user/info', [\App\Http\Controllers\Api\v1\MemberController::class, 'getInfo']);