durong il y a 5 ans
Parent
commit
2959026b28

+ 178 - 0
app/Http/Controllers/MusicController.php

@@ -0,0 +1,178 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: durong
+ * Date: 2019/7/8
+ * Time: 下午10:37
+ */
+namespace App\Http\Controllers;
+use App\Models\PostMusicCategoryRel;
+use App\Repositories\MusicRepository;
+use App\Transformers\MusicCategoryTransformer;
+use App\Transformers\MusicTranformer;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Validator;
+use Illuminate\Validation\Rule;
+use League\Fractal\Manager;
+use League\Fractal\Pagination\IlluminatePaginatorAdapter;
+use League\Fractal\Resource\Collection;
+
+class MusicController extends Controller
+{
+    public function __construct(MusicRepository $musicRepository) {
+        $this->musicRepository = $musicRepository;
+    }
+    //音乐分类列表
+    public function categoryList(Request $request)
+    {
+        $categoryList = $this->musicRepository->category_list($request->all());
+        if (count($categoryList)>0) {
+            foreach ($categoryList as $k => $v) {
+                $v->music_count = PostMusicCategoryRel::where('music_category_id', $v['id'])->count();
+            }
+        }
+        $fractal = new Manager();
+        $resource = new Collection($categoryList, new MusicCategoryTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($categoryList));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'id'
+            ],
+            'columns' => [
+                'id',
+                'name',
+                'music_count',
+                'is_open'
+            ]
+        ];
+        return $data;
+    }
+
+    //新增音乐分类
+    public function categoryCreate(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'name' => 'required|string|max:8',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+
+        return  $this->musicRepository->categoryCreate($request->all());
+
+    }
+
+    //编辑音乐分类
+    public function categoryEdit(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:post_music_category',
+            'name' => 'required|string|max:8',
+        ]);
+
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->musicRepository->categoryEdit($request->all());
+
+    }
+
+    //修改分类状态
+    public function editStatus(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:post_music_category',
+            'is_open' => ['required', Rule::in(0,1)],
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+
+        return  $this->musicRepository->editStatus($request->all());
+    }
+
+    //删除音乐分类
+    public function categoryDelete(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:post_music_category'
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return $this->musicRepository->categoryDelete($request->only('id'));
+
+    }
+
+    //音乐列表
+    public function musicList(Request $request)
+    {
+        $musicList = $this->musicRepository->category_list($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($musicList, new MusicTranformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($musicList));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'id',
+                'name',
+                'category_id',
+            ],
+            'columns' => [
+                'id',
+                'name',
+                'category_id',
+                'music_duration',
+                'created_at'
+            ]
+        ];
+        return $data;
+
+    }
+
+    //新增音乐
+    public function musicCreate(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'name' => 'required|string|max:50',
+            'url' => 'required|string',
+            'category_id' => 'required|integer',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+
+        return  $this->musicRepository->musicCreate($request->all());
+
+    }
+
+    //修改音乐
+    public function musicEdit(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:post_music',
+            'name' => 'required|string|max:50',
+            'category_id' => 'required|integer',
+            'url' => 'required|string'
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+
+        return  $this->musicRepository->musicEdit($request->all());
+    }
+
+    //删除音乐
+    public function musicDelete(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:post_music'
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return $this->musicRepository->musicDelete($request->only('id'));
+
+    }
+}

+ 235 - 0
app/Repositories/MusicRepository.php

@@ -0,0 +1,235 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: durong
+ * Date: 2019/7/8
+ * Time: 下午23:50
+ */
+namespace App\Repositories;
+use Acekyd\LaravelMP3\LaravelMP3;
+use App\Models\PostMusic;
+use App\Models\PostMusicCategory;
+use App\Models\PostMusicCategoryRel;
+use Illuminate\Support\Facades\DB;
+use Symfony\Component\HttpKernel\Exception\HttpException;
+use Dingo\Api\Http\Response;
+use Illuminate\Database\QueryException;
+
+
+class MusicRepository
+{
+    public function __construct(PostMusicCategoryRel $postMusicCategoryRel,PostMusicCategory $postMusicCategory,PostMusic $postMusic)
+    {
+        $this->postMusicCategoryRel = $postMusicCategoryRel;
+        $this->postMusicCategory = $postMusicCategory;
+        $this->postMusic = $postMusic;
+    }
+
+    public function category_list($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+        $where = [];
+        if(isset($request['id'])){
+            $where[] = ['id', '=', $request['id']];
+        }
+
+        return $this->postMusicCategory->where($where)->orderBy('id', 'asc')->paginate($perPage);
+    }
+//
+//    public function postMusicList($request)
+//    {
+//        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+//
+//        $postMusicList = $this->postMusicCategoryRel
+//            ->join('post_music_category', 'post_music_category.id', '=', 'post_music_category_rel.music_category_id')
+//            ->join('post_music', 'post_music.id', '=', 'post_music_category_rel.mid')
+//            ->select('post_music.*')
+//            ->where('post_music_category.id', '=', $request['category_id'])
+//            ->orderBy('id', 'desc')
+//            ->paginate($perPage);
+//
+//        return $postMusicList;
+//
+//    }
+
+    public function categoryCreate($request)
+    {
+        if($this->postMusicCategory->where('name', $request['name'])->exists()){
+            throw new HttpException(500, '该分类已经存在');
+        }
+
+        $data = [
+            'name' => $request['name'],
+            'is_open' => $request['is_open'] ?? 0,
+        ];
+
+        if (!$this->postMusicCategory->create($data)) {
+            throw new HttpException(500, '添加失败');
+        }
+    }
+
+    public function categoryEdit($request)
+    {
+        if($this->postMusicCategory->where('name', $request['name'])->exists()){
+            throw new HttpException(500, '该分类已经存在');
+        }
+
+        $post_music_category = $this->postMusicCategory->where('id', $request['id'])->first();
+        $post_music_category->name = $request['name'];
+        $post_music_category->is_open = $request['is_open'] ?? 0;
+        $post_music_category->updated_at = date('Y-m-d H:i:s');
+
+        $res = $post_music_category->save();
+        if (!$res) {
+            throw new HttpException(500, '音乐分类更新失败');
+        }
+    }
+
+    public function editStatus($request)
+    {
+        $post_music_category = $this->postMusicCategory->find($request['id']);
+        $post_music_category->is_open = $request['is_open'];
+        $post_music_category->updated_at = date('Y-m-d H:i:s');
+
+        $res = $post_music_category->save();
+
+        if (!$res) {
+            throw new HttpException(500, '修改状态失败');
+        }
+    }
+
+    public function categoryDelete($request)
+    {
+        $post_music_category = $this->postMusicCategory->where('id', $request['id'])->first();
+        $res = $post_music_category->delete();
+        if (!$res){
+            return Response::create([
+                'message'  => '删除失败,请重试',
+                'status_code'   => 500
+            ]);
+        }
+    }
+
+    public function musicList($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+
+        $postMusicList = $this->postMusicCategoryRel
+            ->join('post_music_category', 'post_music_category.id', '=', 'post_music_category_rel.music_category_id')
+            ->join('post_music', 'post_music.id', '=', 'post_music_category_rel.mid')
+            ->select('post_music.*','post_music_category.name as category_name')
+            ->orderBy('id', 'desc')
+            ->paginate($perPage);
+
+        return $postMusicList;
+
+    }
+
+    public function musicCreate($request)
+    {
+        $url = $request['url'];
+        $data = [
+            'name' => $request['name'],
+            'url' => $url,
+        ];
+        $date = date('Y-m-d H:i:s');
+        DB::beginTransaction();
+        try{
+            $create_music = $this->postMusic->create($data);
+            if ($create_music){
+                if ($this->postMusicCategoryRel->where(['mid' => $request['mid'], 'music_category_id' => $request['category_id']])->exists()) {
+                    throw new HttpException(500, '该音乐已经存在');
+                }
+                $create_category_rel = [
+                    'mid' => $create_music['id'],
+                    'music_category_id' => $request['category_id'],
+                    'created_at' => $date,
+                    'updated_at' => $date,
+                ];
+                $result = $this->postMusicCategoryRel->insert($create_category_rel);
+                if (!$result){
+                    throw new HttpException(500, '音乐与分类关联-添加失败');
+                }
+            }
+            DB::commit();
+            return Response::create();
+
+        }catch (QueryException $exception){
+            DB::rollBack();
+            return Response::create([
+                'message'  => '添加失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+
+
+    }
+
+    public function musicEdit($request)
+    {
+        $post_music = $this->postMusic->where('id', $request['id'])->first();
+        $date = date('Y-m-d H:i:s');
+        $post_music->name = $request['name'];
+        $post_music->url = $request['url'];
+        $post_music->updated_at = $date;
+        DB::beginTransaction();
+        try{
+        $res = $post_music->save();
+            if ($res){
+                if ($this->postMusicCategoryRel->where(['mid' => $request['mid'], 'music_category_id' => $request['category_id']])->exists()) {
+                    throw new HttpException(500, '该音乐已经存在');
+                }
+                $create_category_rel = [
+                    'mid' => $request['id'],
+                    'music_category_id' => $request['category_id'],
+                    'created_at' => $date,
+                    'updated_at' => $date,
+                ];
+                $result = $this->postMusicCategoryRel->where('mid',$post_music->id)->update($create_category_rel);
+                if (!$result){
+                    throw new HttpException(500, '音乐与分类关联-修改失败');
+                }
+            }
+            DB::commit();
+            return Response::create();
+
+        }catch (QueryException $exception){
+            DB::rollBack();
+            return Response::create([
+                'message'  => '修改失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+
+    }
+
+    public function musicDelete($request)
+    {
+        $post_music = $this->postMusic->where('id', $request['id'])->first();
+        DB::beginTransaction();
+        try {
+            $res = $post_music->delete();
+            if ($res) {
+                $post_category_rel = $this->postMusicCategoryRel->where('mid',$post_music->id)->delete();
+
+                if (!$post_category_rel){
+                    throw new HttpException(500, '音乐与分类关联-删除失败');
+                }
+            }
+            DB::commit();
+            return Response::create();
+
+        } catch (QueryException $exception) {
+            DB::rollBack();
+            return Response::create([
+                'message' => '删除失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code' => 500
+            ]);
+        }
+    }
+
+
+}

+ 23 - 0
app/Transformers/MusicCategoryTransformer.php

@@ -0,0 +1,23 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: durong
+ * Date: 2019/7/8
+ * Time: 下午9:53
+ */
+namespace App\Transformers;
+use App\Models\PostMusicCategory;
+use League\Fractal\TransformerAbstract;
+
+class MusicCategoryTransformer extends TransformerAbstract {
+
+    public function transform(PostMusicCategory $categoryList)
+    {
+        return [
+            'id' => $categoryList['id'],
+            'name' => $categoryList['name'],
+            'music_count' => $categoryList['music_count'],
+            'is_open' => $categoryList['is_open'],
+        ];
+    }
+}

+ 27 - 0
app/Transformers/MusicTranformer.php

@@ -0,0 +1,27 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: durong
+ * Date: 2019/7/4
+ * Time: 上午9:53
+ */
+namespace App\Transformers;
+
+use App\Models\PostMusicCategoryRel;
+use League\Fractal\TransformerAbstract;
+
+class MusicTranformer extends TransformerAbstract {
+
+    public function transform(PostMusicCategoryRel $musicList)
+    {
+        return [
+            'id' => $musicList['id'],
+            'name' => $musicList['name'],
+            'music_duration' => $musicList['music_duration'],
+            'url' => $musicList['url'],
+            'img' => $musicList['img'],
+            'singer' => $musicList['singer'],
+            'category_name' => $musicList['category_name'],
+        ];
+    }
+}

+ 22 - 1
routes/api.php

@@ -125,4 +125,25 @@ $api->version('v1', [
         });
     });
 
-});
+            //音乐分类列表
+            $api->get('category/list', 'MusicController@categoryList');
+            //新增音乐分类
+            $api->post('category/create', 'MusicController@categoryCreate');
+            //编辑音乐分类
+            $api->put('category/create', 'MusicController@categoryEdit');
+            //修改音乐分类状态
+            $api->put('category/status', 'MusicController@editStatus');
+            //删除音乐分类
+            $api->delete('category/delete', 'MusicController@categoryDelete');
+
+            //音乐列表
+            $api->get('music/list', 'MusicController@musicList');
+            //新建音乐
+            $api->post('music/create', 'MusicController@musicCreate');
+            //修改音乐
+            $api->put('music/create', 'MusicController@musicEdit');
+            //删除音乐
+            $api->delete('music/delete', 'MusicController@musicDelete');
+            //用户上传音乐列表
+            $api->get('music/upload/list', 'MusicController@userMusic');
+});