visuddhinanda 1 год назад
Родитель
Сommit
206eed3a6d

+ 95 - 0
api-v8/app/Http/Controllers/AccessTokenController.php

@@ -0,0 +1,95 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\AccessToken;
+use Illuminate\Http\Request;
+use Illuminate\Support\Str;
+use Firebase\JWT\JWT;
+use Firebase\JWT\Key;
+use Illuminate\Support\Facades\Log;
+
+class AccessTokenController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+        $payload = $request->get('payload');
+        $result = array();
+        foreach ($payload as $key => $value) {
+            //获取token
+            $token = AccessToken::where('res_type', $value['res_type'])
+                ->where('res_id', $value['res_id'])
+                ->first();
+            if (!$token) {
+                $token = new AccessToken();
+                $token->res_type = $value['res_type'];
+                $token->res_id = $value['res_id'];
+                $token->token = Str::uuid();
+                $token->save();
+            }
+            try {
+                $jwt = JWT::encode($value, $token->token, 'HS512');
+            } catch (\Exception $e) {
+                Log::error('jwt', ['error' => $e]);
+                continue;
+            }
+            $result[] = [
+                'payload' => $value,
+                'token' => $jwt
+            ];
+        }
+        return $this->ok(['rows' => $result, 'count' => count($result)]);
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\AccessToken  $accessToken
+     * @return \Illuminate\Http\Response
+     */
+    public function show(AccessToken $accessToken)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\AccessToken  $accessToken
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, AccessToken $accessToken)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\AccessToken  $accessToken
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(AccessToken $accessToken)
+    {
+        //
+    }
+}

+ 11 - 0
api-v8/app/Models/AccessToken.php

@@ -0,0 +1,11 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class AccessToken extends Model
+{
+    use HasFactory;
+}

+ 34 - 0
api-v8/database/migrations/2025_01_11_103827_create_access_tokens_table.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateAccessTokensTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('access_tokens', function (Blueprint $table) {
+            $table->id();
+            $table->uuid('res_id')->unique();
+            $table->string('res_type')->index();
+            $table->uuid('token')->unique();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('access_tokens');
+    }
+}

+ 23 - 0
dashboard-v4/dashboard/src/components/api/token.ts

@@ -0,0 +1,23 @@
+export interface IPayload {
+  res_type: string;
+  res_id: string;
+  book?: number;
+  para_start?: number;
+  para_end?: number;
+}
+
+export interface ITokenCreate {
+  payload: IPayload[];
+}
+export interface ITokenData {
+  payload: IPayload;
+  token: string;
+}
+export interface ITokenCreateResponse {
+  ok: boolean;
+  message: string;
+  data: {
+    rows: ITokenData[];
+    count: number;
+  };
+}