浏览代码

list 处理搜索和排序

visuddhinanda 2 年之前
父节点
当前提交
1742bcf0da
共有 1 个文件被更改,包括 54 次插入21 次删除
  1. 54 21
      app/Http/Controllers/ViewController.php

+ 54 - 21
app/Http/Controllers/ViewController.php

@@ -8,6 +8,9 @@ use App\Models\PaliText;
 use Illuminate\Http\Request;
 use Illuminate\Support\Str;
 use Illuminate\Support\Facades\Log;
+use App\Http\Resources\ViewResource;
+use App\Http\Api\AuthApi;
+use App\Http\Api\StudioApi;
 
 class ViewController extends Controller
 {
@@ -23,9 +26,6 @@ class ViewController extends Controller
                 break;
             case 'chapter':
                 # code...
-                $channel = $request->get("channel");
-                $book = $request->get("book");
-                $para = $request->get("para");
                 $target_id = ProgressChapter::where("channel_id",$request->get("channel"))
                                             ->where("book",$request->get("book"))
                                             ->where("para",$request->get("para"))
@@ -69,25 +69,55 @@ class ViewController extends Controller
                 return $this->ok($count);
                 break;
             case 'user-recent':
-                if(!isset($_COOKIE["user_uid"])){
-                    return $this->error("no login");
+                $user = AuthApi::current($request);
+                if(!$user){
+                    return $this->error(__('auth.failed'));
                 }
-                $user_id = $_COOKIE["user_uid"];
+                $user_id = $user["user_uid"];
 				$views =  View::where("user_id",$user_id)->orderBy('created_at','desc');
-				if($request->has("take")){
-					$views = $views->take($request->get("take"));
-				}else{
-					$views = $views->take(10);
-				}
+				$views = $views->take($request->get("take",10));
                 $items = $views->get();
-
                 return $this->ok($items);
                 break;
+            case 'user':
+                $user = AuthApi::current($request);
+                if(!$user){
+                    return $this->error(__('auth.failed'));
+                }
+                $user_id = $user["user_uid"];
+                $table =  View::where("user_id",$user_id);
+                break;
+            case 'studio':
+                # 获取studio内所有 数据
+                $user = AuthApi::current($request);
+                if(!$user){
+                    return $this->error(__('auth.failed'));
+                }
+                //判断当前用户是否有指定的studio的权限
+                $studioId = StudioApi::getIdByName($request->get('name'));
+                if($user['user_uid'] !== $studioId){
+                    return $this->error(__('auth.failed'));
+                }
+                $table = View::where('user_id',$studioId);
+                break;
             default:
                 # code...
                 break;
         }
-
+        //处理搜索
+        if($request->has("search")){
+            $table = $table->where('name', 'like', "%".$request->get("search")."%");
+        }
+        //获取记录总条数
+        $count = $table->count();
+        //处理排序
+        $table = $table->orderBy($request->get("order",'updated_at'),$request->get("dir",'desc'));
+        //处理分页
+        $table = $table->skip($request->get("offset",0))
+                       ->take($request->get("limit",20));
+        //获取数据
+        $result = $table->get();
+        return $this->ok(["rows"=>ViewResource::collection($result),"count"=>$count]);
     }
 
     /**
@@ -111,19 +141,21 @@ class ViewController extends Controller
 */
         //根据target type 获取 target id
         $target_id = $this->getTargetId($request);
+        if(!$target_id){
+            return $this->error('no id');
+        }
         $clientIp = request()->ip();
         $param = [
             'target_id' => $target_id,
             'target_type' => $request->get("target_type"),
         ];
-        if(isset($_COOKIE['user_uid'])){
+        $user = AuthApi::current($request);
+        if($user){
             //已经登陆
-            $user_id = $_COOKIE['user_uid'];
+            $user_id = $user['user_uid'];
             $param['user_id'] = $user_id;
-        }else{
-            $param['user_ip'] = $clientIp;
         }
-
+        $param['user_ip'] = $clientIp;
         $new = View::firstOrNew($param);
         $new->user_ip = $clientIp;
 
@@ -137,15 +169,16 @@ class ViewController extends Controller
 										->where("paragraph",$request->get("para"))
 										->value("toc");
 				//获取标题 成功
-
 				$new->meta = \json_encode([
 					"book"=>$request->get("book"),
 					"para"=>$request->get("para"),
 					"channel"=>$request->get("channel"),
+                    "mode"=>$request->get("mode","read"),
 				]);
-				//获取meta数据成功
-
 				break;
+            default:
+                return $this->error('未知的数据类型');
+                break;
 		}
 		$new->count = $new->count+1;
         $new->save();