2
0
Эх сурвалжийг харах

:sparkles: 记录和查询点击量

visuddhinanda@gmail.com 3 жил өмнө
parent
commit
e6a7705993

+ 131 - 0
app/Http/Controllers/ViewController.php

@@ -0,0 +1,131 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\View;
+use Illuminate\Http\Request;
+use Illuminate\Support\Str;
+
+class ViewController extends Controller
+{
+    private function getTargetId($request){
+        $target_id = FALSE;
+        switch ($request->get("target_type")) {
+            case 'chapter-instance':
+                # code...
+                $target_id = $request->get("target_id");
+                break;
+            case 'chapter':
+                # code...
+                break;
+            case 'article-instance':
+                # code...
+                break;
+            case 'article':
+                # code...
+                break;
+            default:
+                $target_id = $request->get("target_id");
+                # code...
+                break;
+        }
+        if(Str::isUuid($target_id)){
+            return $target_id;
+        }else{
+            return false;
+        }
+        
+    }
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        //根据target type 获取 target id
+        $target_id = $this->getTargetId($request);
+        if($target_id){
+            $count = View::where("target_id",$target_id)->count();
+        }else{
+            $count = 0;
+        }
+        return $this->ok($count);
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        /*
+        $rules = array(
+            'target_type' => 'required'
+        );
+        $validator = Validator::make($request->all(), $rules);
+
+        // process the login
+        if ($validator->fails()) {
+            return $this->error($validator);
+        }
+*/
+        //根据target type 获取 target id
+        $target_id = $this->getTargetId($request);
+        $clientIp = request()->ip();
+        $param = [
+            'target_id' => $target_id,
+            'target_type' => $request->get("target_type"),
+        ];
+        if(isset($GET['user_uid'])){
+            //已经登陆
+            $user_id = $GET['user_uid'];
+            $param['user_id'] = $user_id;
+        }else{
+            $param['user_ip'] = $clientIp;
+        }
+        $new = View::firstOrNew($param);
+        $new->user_ip = $clientIp;
+        $new->save();
+
+        return $this->ok($new);
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\View  $view
+     * @return \Illuminate\Http\Response
+     */
+    public function show(View $view)
+    {
+        //
+
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\View  $view
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, View $view)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\View  $view
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(View $view)
+    {
+        //
+    }
+}

+ 16 - 0
app/Models/View.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class View extends Model
+{
+    use HasFactory;
+
+    protected $casts = [
+    'id' => 'string'
+    ];
+    protected $fillable = ['target_type' , 'target_id' , 'user_id', 'user_ip'];
+}

+ 35 - 0
database/migrations/2022_05_27_072344_create_views_table.php

@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateViewsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     * 点击量统计
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('views', function (Blueprint $table) {
+            $table->uuid('id')->primary()->default(DB::raw('uuid_generate_v1mc()'));
+            $table->uuid('target_id')->index();
+            $table->string('target_type',32)->index();
+            $table->uuid('user_id')->index()->nullable();
+            $table->ipAddress('user_ip')->index();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('views');
+    }
+}

+ 2 - 0
routes/api.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\WbwTemplateController;
 use App\Http\Controllers\DhammaTermController;
 use App\Http\Controllers\SentenceController;
 use App\Http\Controllers\SentenceInfoController;
+use App\Http\Controllers\ViewController;
 
 /*
 |--------------------------------------------------------------------------
@@ -26,4 +27,5 @@ Route::group(['prefix' => 'v2'],function(){
 	Route::apiResource('wbw_templates',WbwTemplateController::class);
 	Route::apiResource('terms',DhammaTermController::class);
 	Route::apiResource('sentence',SentenceController::class);
+	Route::apiResource('view',ViewController::class);
 });