Browse Source

Merge pull request #2110 from visuddhinanda/laravel

添加 tags支持
visuddhinanda 1 year ago
parent
commit
4ea003fd3a

+ 43 - 9
app/Http/Controllers/DiscussionCountController.php

@@ -3,6 +3,10 @@
 namespace App\Http\Controllers;
 
 use Illuminate\Http\Request;
+use App\Http\Api\AuthApi;
+use App\Http\Api\ChannelApi;
+use App\Http\Resources\DiscussionCountResource;
+use App\Http\Resources\TagMapResource;
 use Illuminate\Support\Facades\Log;
 use App\Models\Discussion;
 use App\Models\CourseMember;
@@ -10,8 +14,8 @@ use App\Models\Course;
 use App\Models\Sentence;
 use App\Models\WbwBlock;
 use App\Models\Wbw;
-use App\Http\Api\AuthApi;
-use App\Http\Resources\DiscussionCountResource;
+use App\Models\TagMap;
+
 
 
 class DiscussionCountController extends Controller
@@ -63,6 +67,7 @@ class DiscussionCountController extends Controller
         if(!$user){
             return $this->error('auth.failed',401,401);
         }
+        $studioIdForTag = $user["user_uid"];
         if($request->has('course_id')){
             //判断我的角色
             $my = CourseMember::where('user_id',$user["user_uid"])
@@ -80,7 +85,7 @@ class DiscussionCountController extends Controller
             Log::debug('allMembers',['members'=>$allMembers]);
             //找到全部相关channel
             $channels = array();
-            //获取答案channel
+            //获取答案 channel
             $answerChannel = Course::where('id',$request->get('course_id'))
                             ->value('channel_id');
             $exerciseChannels = CourseMember::where('is_current',true)
@@ -98,9 +103,17 @@ class DiscussionCountController extends Controller
                 }
             }else{
                 //找到全部学员channel + 答案
+
                 foreach ($exerciseChannels as $key => $value) {
                     array_push($channels,$value->channel_id);
                 }
+                //找到
+                $courseStudioId = Course::where('id',$request->get('course_id'))
+                            ->value('studio_id');
+                if($courseStudioId){
+                    $studioIdForTag = $courseStudioId;
+                }
+
             }
         }
 
@@ -143,6 +156,7 @@ class DiscussionCountController extends Controller
         }
         Log::debug('res id',['res'=>$resId]);
         //全部资源id获取完毕
+        //获取discussion
         $table = Discussion::select(['id','res_id','res_type','type','editor_uid'])
                             ->where('status','active')
                             ->whereNull('parent')
@@ -152,9 +166,19 @@ class DiscussionCountController extends Controller
         }
 
         $allDiscussions = $table->get();
-        $result = DiscussionCountResource::collection($allDiscussions);
-        Log::debug('response',['data'=>$result]);
-        return $this->ok($result);
+        $discussions = DiscussionCountResource::collection($allDiscussions);
+
+        //获取 tag
+        $tags = TagMap::select(['tag_maps.id','anchor_id','table_name','tag_id','editor_uid','tags.name','tags.color'])
+                            ->whereIn('anchor_id',$resId)
+                            ->where('owner_uid',$studioIdForTag)
+                            ->leftJoin('tags','tags.id', '=', 'tag_maps.tag_id')
+                            ->get();
+        Log::debug('response',['data'=>$discussions]);
+        return $this->ok([
+            'discussions'=>$discussions,
+            'tags' => $tags,
+        ]);
     }
 
     /**
@@ -171,9 +195,19 @@ class DiscussionCountController extends Controller
                                     ->where('res_id',$resId)
                                     ->select(['id','res_id','res_type','type','editor_uid'])
                                     ->get();
-        $result = DiscussionCountResource::collection($allDiscussions);
-        Log::debug('response',['data'=>$result]);
-        return $this->ok($result);
+        $discussions = DiscussionCountResource::collection($allDiscussions);
+
+        //获取 tag
+        $table = TagMap::select(['id','anchor_id','table_name','tag_id','editor_uid'])
+                       ->where('anchor_id',$resId);
+
+        $allTags = $table->get();
+        $tags = TagMapResource::collection($allTags);
+        Log::debug('response',['discussions'=>$discussions]);
+        return $this->ok([
+            'discussions'=>$discussions,
+            'tags' => $tags,
+        ]);
     }
 
     /**

+ 24 - 0
app/Http/Controllers/TagController.php

@@ -77,6 +77,7 @@ class TagController extends Controller
         $tag = new Tag;
         $tag->name = $request->get("name");
         $tag->description = $request->get("description");
+        $tag->color = $request->get("color");
         $tag->owner_id = $studioId;
         $tag->save();
         return $this->ok(new TagResource($tag));
@@ -105,6 +106,29 @@ class TagController extends Controller
     public function update(Request $request, Tag $tag)
     {
         //
+        $user = AuthApi::current($request);
+        if(!$user){
+            return $this->error(__('auth.failed'),401,401);
+        }
+        //判断当前用户是否有指定的studio的权限
+        $studioId = StudioApi::getIdByName($request->get('studio'));
+        if($user['user_uid'] !== $studioId){
+            return $this->error(__('auth.failed'),403,403);
+        }
+        //查询是否重复
+        if(Tag::where('name',$request->get('name'))
+                  ->where('owner_id',$user['user_uid'])
+                  ->where('id','<>',$tag->id)
+                  ->exists()){
+            return $this->error(__('validation.exists',['name']),200,200);
+        }
+
+        $tag->name = $request->get("name");
+        $tag->description = $request->get("description");
+        $tag->color = $request->get("color");
+        $tag->owner_id = $studioId;
+        $tag->save();
+        return $this->ok(new TagResource($tag));
     }
 
     /**

+ 5 - 5
app/Http/Controllers/TagMapController.php

@@ -9,6 +9,7 @@ use App\Http\Resources\TagMapResource;
 use App\Http\Resources\TagResource;
 use App\Http\Api\AuthApi;
 use App\Http\Api\StudioApi;
+use App\Http\Api\CourseApi;
 use Illuminate\Support\Str;
 
 class TagMapController extends Controller
@@ -83,16 +84,15 @@ class TagMapController extends Controller
         $tag->owner_uid = $studioId;
         $tag->save();
 
-        $tagsId = TagMap::where('anchor_id',$request->get("anchor_id"))
+        $tagsMap = TagMap::where('anchor_id',$request->get("anchor_id"))
                     ->where('owner_uid',$studioId)
                     ->select('tag_id')
                     ->get();
-        $tags = Tag::whereIn('id',$tagsId)
-                    ->get();
+
         return $this->ok(
             [
-            "rows"=>TagResource::collection($tags),
-            "count"=>count($tags),
+            "rows"=>TagMapResource::collection($tagsMap),
+            "count"=>count($tagsMap),
             ]
         );