Browse Source

:construction: create

visuddhinanda 3 years ago
parent
commit
df23d5d26a

+ 164 - 0
app/Http/Controllers/GroupMemberController.php

@@ -0,0 +1,164 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\GroupMember;
+use App\Models\GroupInfo;
+use Illuminate\Http\Request;
+use App\Http\Resources\GroupMemberResource;
+use App\Http\Api\AuthApi;
+
+class GroupMemberController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+		$result=false;
+		$indexCol = ['id','user_id','group_id','power','level','status','updated_at','created_at'];
+		switch ($request->get('view')) {
+            case 'group':
+	            # 获取 group 内所有 成员
+                $user = AuthApi::current($request);
+                if($user){
+                    //TODO 判断当前用户是否有指定的 group 的权限
+
+                    if(GroupInfo::where('uid',$request->get('id'))->where('owner',$user['user_uid'])->exists()){
+                        $table = GroupMember::where('group_id', $request->get('id'));
+                    }else{
+                        return $this->error(__('auth.failed'));
+                    }
+                }else{
+                    return $this->error(__('auth.failed'));
+                }
+				break;
+        }
+        if(isset($_GET["search"])){
+            $table = $table->where('title', 'like', $_GET["search"]."%");
+        }
+        $count = $table->count();
+        if(isset($_GET["order"]) && isset($_GET["dir"])){
+            $table = $table->orderBy($_GET["order"],$_GET["dir"]);
+        }else{
+            $table = $table->orderBy('updated_at','desc');
+        }
+
+        if(isset($_GET["limit"])){
+            $offset = 0;
+            if(isset($_GET["offset"])){
+                $offset = $_GET["offset"];
+            }
+            $table = $table->skip($offset)->take($_GET["limit"]);
+        }
+        $result = $table->get();
+        foreach ($result as $key => $value) {
+            # 找到当前用户
+            if($user["user_uid"]===$value->user_id){
+                switch ($value->power) {
+                    case 0:
+                        $role = "owner";
+                        break;
+                    case 1:
+                        $role = "manager";
+                        break;
+                    case 2:
+                        $role = "member";
+                        break;
+                    default:
+                        $role="unknown";
+                        break;
+                }
+            }
+        }
+
+		if($result){
+			return $this->ok(["rows"=>GroupMemberResource::collection($result),"count"=>$count,'role'=>$role]);
+		}else{
+			return $this->error("没有查询到数据");
+		}
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+        $validated = $request->validate([
+            'user_id' => 'required',
+            'group_id' => 'required',
+        ]);
+        //查找重复的项目
+        if(GroupMember::where('group_id', $validated['group_id'])->where('user_id',$validated['user_id'])->exists()){
+            return $this->error('member exists');
+        }
+        $newMember = new GroupMember();
+        $newMember->id=app('snowflake')->id();
+        $newMember->user_id = $validated['user_id'];
+        $newMember->group_id = $validated['group_id'];
+        $newMember->power = 2;
+        $newMember->group_name = GroupInfo::find($validated['group_id'])->name;
+        $newMember->save();
+        return $this->ok(new GroupMemberResource($newMember));
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\GroupMember  $groupMember
+     * @return \Illuminate\Http\Response
+     */
+    public function show(GroupMember $groupMember)
+    {
+        //
+
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\GroupMember  $groupMember
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, GroupMember $groupMember)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *@param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\GroupMember  $groupMember
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Request $request, GroupMember $groupMember)
+    {
+        //
+        //查看删除者有没有删除权限
+        //查询删除者的权限
+        $currUser = AuthApi::current($request);
+        if(!$currUser){
+            return $this->error(__('auth.failed'));
+        }
+
+        $power = GroupMember::where('group_id',$groupMember->group_id)
+                        ->where('user_id',$currUser["user_uid"])
+                        ->select('power')->first();
+        if(!$power || $power->power>=2){
+            //普通成员没有删除权限
+            return $this->error(__('auth.failed'));
+        }
+
+        $delete = $groupMember->delete();
+        return $this->ok($delete);
+
+    }
+}

+ 114 - 0
app/Http/Controllers/ShareController.php

@@ -0,0 +1,114 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Share;
+use App\Models\GroupInfo;
+use Illuminate\Http\Request;
+use App\Http\Resources\ShareResource;
+
+class ShareController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        $result=false;
+		$indexCol = ['id','res_id','res_type','power','updated_at','created_at'];
+		switch ($request->get('view')) {
+            case 'group':
+	            # 获取 group 内所有 成员
+                $user = \App\Http\Api\AuthApi::current($request);
+                if($user){
+                    //TODO 判断当前用户是否有指定的 group 的权限
+
+                    if(GroupInfo::where('uid',$request->get('id'))->where('owner',$user['user_uid'])->exists()){
+                        $table = Share::where('cooperator_id', $request->get('id'));
+                    }else{
+                        return $this->error(__('auth.failed'));
+                    }
+                }else{
+                    return $this->error(__('auth.failed'));
+                }
+				break;
+        }
+        if(isset($_GET["search"])){
+            //TODO 搜索资源标题
+            $table = $table->where('title', 'like', $_GET["search"]."%");
+        }
+        $count = $table->count();
+        if(isset($_GET["order"]) && isset($_GET["dir"])){
+            $table = $table->orderBy($_GET["order"],$_GET["dir"]);
+        }else{
+            $table = $table->orderBy('updated_at','desc');
+        }
+
+        if(isset($_GET["limit"])){
+            $offset = 0;
+            if(isset($_GET["offset"])){
+                $offset = $_GET["offset"];
+            }
+            $table = $table->skip($offset)->take($_GET["limit"]);
+        }
+        $result = $table->get();
+        //TODO 获取当前用户的身份
+        $role = "member";
+
+		if($result){
+			return $this->ok(["rows"=>ShareResource::collection($result),"count"=>$count,'role'=>$role]);
+		}else{
+			return $this->error("没有查询到数据");
+		}
+
+
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\Share  $share
+     * @return \Illuminate\Http\Response
+     */
+    public function show(Share $share)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\Share  $share
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, Share $share)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\Share  $share
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Share $share)
+    {
+        //
+    }
+}

+ 30 - 0
app/Http/Resources/GroupMemberResource.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Resources;
+
+use App\Http\Api\UserApi;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class GroupMemberResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
+     */
+    public function toArray($request)
+    {
+        return [
+            "id"=>$this->id,
+            "user_id"=> $this->user_id,
+            "group_id"=> $this->group_id,
+            "power"=> $this->power,
+            "level"=> $this->level,
+            "status"=> $this->status,
+            "user"=> UserApi::getById($this->user_id),
+            "created_at"=> $this->created_at,
+            "updated_at"=> $this->updated_at,
+        ];
+    }
+}

+ 69 - 0
app/Http/Resources/ShareResource.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Resources\Json\JsonResource;
+use App\Models\Channel;
+use App\Models\Article;
+use App\Http\Api\StudioApi;
+
+class ShareResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
+     */
+    public function toArray($request)
+    {
+        //获取资源信息
+        $res_name="";
+        $owner="";
+        switch ($this->res_type) {
+            case 1:
+                # PCS 文档
+                break;
+            case 2:
+                # Channel 版本
+                $res = Channel::where('uid',$this->res_id)->first();
+                if($res){
+                    $res_name = $channel->name;
+                    $owner = StudioApi::getById($res->owner_uid);
+                }
+                break;
+            case 3:
+                # Article 文章
+                $res = Article::where('uid',$this->res_id)->first();
+                if($res){
+                    $res_name = $res->title;
+                    $owner = StudioApi::getById($res->owner);
+                }
+                break;
+            case 4:
+                # Collection 文集
+                $res = Collection::where('uid',$this->res_id)->first();
+                if($res){
+                    $res_name = $res->title;
+                    $owner = StudioApi::getById($res->owner);
+                }
+                break;
+            case 5:
+                # 版本片段 不支持
+                break;
+            default:
+                # code...
+                break;
+        }
+        return [
+            "id"=>$this->id,
+            "res_id"=> $this->res_id,
+            "res_type"=> $this->res_type,
+            "power"=> $this->power,
+            'res_name'=>$res_name,
+            'owner'=>$owner,
+            "created_at"=> $this->created_at,
+            "updated_at"=> $this->updated_at,
+        ];
+    }
+}

+ 43 - 0
tests/Feature/GroupMemberTest.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace Tests\Feature;
+
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class GroupMemberTest extends TestCase
+{
+    /**
+     * A basic feature test example.
+     *
+     * @return void
+     */
+    public function test_example()
+    {
+        $token = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJuYmYiOjE2NjgyMzE3MTksImV4cCI6MTY5OTc2NzcxOSwidWlkIjoiYmE1NDYzZjMtNzJkMS00NDEwLTg1OGUtZWFkZDEwODg0NzEzIiwiaWQiOiI0In0.LV4ItC5VCqXpbKIXT1zePcnfi-heCf3Df63w7qbXsT1i5KJtwJJC938CLgANjqwcQFa3lrR5TqvT1kkqD-Mmgg';
+        $response = $this->withHeaders([
+            'Authorization' => $token,
+        ])->get('/api/v2/group-member?view=group&id=8079d293-5057-449f-b8b2-6482531d2434');
+
+        $response->assertOk();
+        //testing store
+        $response = $this->withHeaders([
+            'Authorization' => $token,
+        ])->json('POST', '/api/v2/group-member',
+                    [
+                        'user_id'=>'61f52926-e024-41f0-8be5-48a962560a23',
+                        'group_id'=>'8079d293-5057-449f-b8b2-6482531d2434',
+                    ]);
+
+        $response->assertOk();
+
+        //testing delete
+        $response = $this->withHeaders([
+            'Authorization' => $token,
+        ])->delete('/api/v2/group-member/134636347641171968');
+        $response->assertOk();
+
+    }
+
+}

+ 25 - 0
tests/Feature/ShareTest.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace Tests\Feature;
+
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class ShareTest extends TestCase
+{
+    /**
+     * A basic feature test example.
+     *
+     * @return void
+     */
+    public function test_example()
+    {
+        $token = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJuYmYiOjE2NjgyMzE3MTksImV4cCI6MTY5OTc2NzcxOSwidWlkIjoiYmE1NDYzZjMtNzJkMS00NDEwLTg1OGUtZWFkZDEwODg0NzEzIiwiaWQiOiI0In0.LV4ItC5VCqXpbKIXT1zePcnfi-heCf3Df63w7qbXsT1i5KJtwJJC938CLgANjqwcQFa3lrR5TqvT1kkqD-Mmgg';
+        $response = $this->withHeaders([
+            'Authorization' => $token,
+        ])->get('/api/v2/share?view=group&id=8079d293-5057-449f-b8b2-6482531d2434');
+
+        $response->assertOk();
+    }
+}