Browse Source

:fire: 不用的依赖Cache

visuddhinanda 1 year ago
parent
commit
33942f6744
1 changed files with 158 additions and 150 deletions
  1. 158 150
      api-v8/app/Http/Controllers/DhammaTermController.php

+ 158 - 150
api-v8/app/Http/Controllers/DhammaTermController.php

@@ -3,7 +3,6 @@
 namespace App\Http\Controllers;
 
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Str;
 use Illuminate\Support\Facades\App;
@@ -33,44 +32,55 @@ class DhammaTermController extends Controller
      */
     public function index(Request $request)
     {
-        $result=false;
-		$indexCol = ['id','guid','word','meaning',
-                    'other_meaning','note','tag','language',
-                    'channal','owner','editor_id',
-                    'created_at','updated_at'];
+        $result = false;
+        $indexCol = [
+            'id',
+            'guid',
+            'word',
+            'meaning',
+            'other_meaning',
+            'note',
+            'tag',
+            'language',
+            'channal',
+            'owner',
+            'editor_id',
+            'created_at',
+            'updated_at'
+        ];
 
-		switch ($request->get('view')) {
+        switch ($request->get('view')) {
             case 'create-by-channel':
                 # 新建术语时。根据术语所在channel 给出新建术语所需数据。如语言,备选意思等。
                 #获取channel信息
-                $currChannel = Channel::where('uid',$request->get('channel'))->first();
-                if(!$currChannel){
+                $currChannel = Channel::where('uid', $request->get('channel'))->first();
+                if (!$currChannel) {
                     return $this->error(__('auth.failed'));
                 }
                 #TODO 查询studio信息
                 #获取同studio的channel列表
-                $studioChannels = Channel::where('owner_uid',$currChannel->owner_uid)
-                                        ->select(['name','uid'])
-                                        ->get();
+                $studioChannels = Channel::where('owner_uid', $currChannel->owner_uid)
+                    ->select(['name', 'uid'])
+                    ->get();
                 #获取全网意思列表
-                $meanings = DhammaTerm::where('word',$request->get('word'))
-                                        ->where('language',$currChannel->lang)
-                                        ->select(['meaning','other_meaning'])
-                                        ->get();
-                $meaningList=[];
+                $meanings = DhammaTerm::where('word', $request->get('word'))
+                    ->where('language', $currChannel->lang)
+                    ->select(['meaning', 'other_meaning'])
+                    ->get();
+                $meaningList = [];
                 foreach ($meanings as $key => $value) {
                     # code...
                     $meaning1 = [$value->meaning];
 
-                    if(!empty($value->other_meaning)){
-                        $meaning2 = \explode(',',$value->other_meaning);
-                        $meaning1 = array_merge($meaning1,$meaning2);
+                    if (!empty($value->other_meaning)) {
+                        $meaning2 = \explode(',', $value->other_meaning);
+                        $meaning1 = array_merge($meaning1, $meaning2);
                     }
                     foreach ($meaning1 as $key => $value) {
                         # code...
-                        if(isset($meaningList[$value])){
+                        if (isset($meaningList[$value])) {
                             $meaningList[$value]++;
-                        }else{
+                        } else {
                             $meaningList[$value] = 1;
                         }
                     }
@@ -78,121 +88,121 @@ class DhammaTermController extends Controller
                 $meaningCount = [];
                 foreach ($meaningList as $key => $value) {
                     # code...
-                    $meaningCount[] = ['meaning'=>$key,'count'=>$value];
+                    $meaningCount[] = ['meaning' => $key, 'count' => $value];
                 }
                 return $this->ok([
-                    "word"=>$request->get('word'),
-                    "meaningCount"=>$meaningCount,
-                    "studioChannels"=>$studioChannels,
-                    "language"=>$currChannel->lang,
-                    'studio'=>StudioApi::getById($currChannel->owner_uid),
+                    "word" => $request->get('word'),
+                    "meaningCount" => $meaningCount,
+                    "studioChannels" => $studioChannels,
+                    "language" => $currChannel->lang,
+                    'studio' => StudioApi::getById($currChannel->owner_uid),
                 ]);
                 break;
             case 'studio':
-				# 获取 studio 内所有 term
+                # 获取 studio 内所有 term
                 $user = AuthApi::current($request);
-                if(!$user){
-                    return $this->error(__('auth.failed'),[],401);
+                if (!$user) {
+                    return $this->error(__('auth.failed'), [], 401);
                 }
                 //判断当前用户是否有指定的studio的权限
-                if($user['user_uid'] !== StudioApi::getIdByName($request->get('name'))){
-                    return $this->error(__('auth.failed'),[],403);
+                if ($user['user_uid'] !== StudioApi::getIdByName($request->get('name'))) {
+                    return $this->error(__('auth.failed'), [], 403);
                 }
                 $table = DhammaTerm::select($indexCol)
-                                   ->where('owner', $user["user_uid"]);
-				break;
+                    ->where('owner', $user["user_uid"]);
+                break;
             case 'channel':
                 # 获取 studio 内所有 term
                 $user = AuthApi::current($request);
-                if(!$user){
+                if (!$user) {
                     return $this->error(__('auth.failed'));
                 }
                 //判断当前用户是否有指定的 channel 的权限
                 $channel = Channel::find($request->get('id'));
-                if($user['user_uid'] !== $channel->owner_uid ){
+                if ($user['user_uid'] !== $channel->owner_uid) {
                     //看是否为协作
-                    $power = ShareApi::getResPower($user['user_uid'],$request->get('id'));
-                    if($power === 0){
-                        return $this->error(__('auth.failed'),[],403);
+                    $power = ShareApi::getResPower($user['user_uid'], $request->get('id'));
+                    if ($power === 0) {
+                        return $this->error(__('auth.failed'), [], 403);
                     }
                 }
                 $table = DhammaTerm::select($indexCol)
-                                    ->where('channal', $request->get('id'));
+                    ->where('channal', $request->get('id'));
                 break;
             case 'show':
                 return $this->ok(DhammaTerm::find($request->get('id')));
                 break;
-			case 'user':
-				# code...
+            case 'user':
+                # code...
                 $user = AuthApi::current($request);
-                if(!$user){
+                if (!$user) {
                     return $this->error(__('auth.failed'));
                 }
                 $userUid = $user['user_uid'];
                 $search = $request->get('search');
-				$table = DhammaTerm::select($indexCol)
-									->where('owner', $userUid);
-				break;
-			case 'word':
-				$table = DhammaTerm::select($indexCol)
-									->whereIn('word', explode(',',$request->get("word")) )
-									->orWhereIn('meaning', explode(',',$request->get("word")) );
-				break;
+                $table = DhammaTerm::select($indexCol)
+                    ->where('owner', $userUid);
+                break;
+            case 'word':
+                $table = DhammaTerm::select($indexCol)
+                    ->whereIn('word', explode(',', $request->get("word")))
+                    ->orWhereIn('meaning', explode(',', $request->get("word")));
+                break;
             case 'tag':
-				$table = DhammaTerm::select($indexCol)
-									->whereIn('tag', explode(',',$request->get("tag")) );
-				break;
+                $table = DhammaTerm::select($indexCol)
+                    ->whereIn('tag', explode(',', $request->get("tag")));
+                break;
             case 'hot-meaning':
-                $key='term/hot_meaning';
-                $value = RedisClusters::get($key, function()use($request) {
-                    $hotMeaning=[];
+                $key = 'term/hot_meaning';
+                $value = RedisClusters::get($key, function () use ($request) {
+                    $hotMeaning = [];
                     $words = DhammaTerm::select('word')
-                                ->where('language',$request->get("language"))
-                                ->groupby('word')
-                                ->get();
+                        ->where('language', $request->get("language"))
+                        ->groupby('word')
+                        ->get();
 
                     foreach ($words as $key => $word) {
                         # code...
                         $result = DhammaTerm::select(DB::raw('count(*) as word_count, meaning'))
-                                ->where('language',$request->get("language"))
-                                ->where('word',$word['word'])
-                                ->groupby('meaning')
-                                ->orderby('word_count','desc')
-                                ->first();
-                        if($result){
-                            $hotMeaning[]=[
-                                'word'=>$word['word'],
-                                'meaning'=>$result['meaning'],
-                                'language'=>$request->get("language"),
-                                'owner'=>'',
+                            ->where('language', $request->get("language"))
+                            ->where('word', $word['word'])
+                            ->groupby('meaning')
+                            ->orderby('word_count', 'desc')
+                            ->first();
+                        if ($result) {
+                            $hotMeaning[] = [
+                                'word' => $word['word'],
+                                'meaning' => $result['meaning'],
+                                'language' => $request->get("language"),
+                                'owner' => '',
                             ];
                         }
                     }
                     RedisClusters::put($key, $hotMeaning, 3600);
                     return $hotMeaning;
                 }, config('mint.cache.expire'));
-                return $this->ok(["rows"=>$value,"count"=>count($value)]);
+                return $this->ok(["rows" => $value, "count" => count($value)]);
                 break;
-			default:
-				# code...
-				break;
-		}
+            default:
+                # code...
+                break;
+        }
 
         $search = $request->get('search');
-        if(!empty($search)){
-            $table = $table->where(function($query) use($search){
-                $query->where('word', 'like', $search."%")
-                  ->orWhere('word_en', 'like', $search."%")
-                  ->orWhere('meaning', 'like', "%".$search."%");
+        if (!empty($search)) {
+            $table = $table->where(function ($query) use ($search) {
+                $query->where('word', 'like', $search . "%")
+                    ->orWhere('word_en', 'like', $search . "%")
+                    ->orWhere('meaning', 'like', "%" . $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',1000));
+        $table = $table->orderBy($request->get('order', 'updated_at'), $request->get('dir', 'desc'));
+        $table = $table->skip($request->get("offset", 0))
+            ->take($request->get('limit', 1000));
         $result = $table->get();
 
-        return $this->ok(["rows"=>TermResource::collection($result),"count"=>$count]);
+        return $this->ok(["rows" => TermResource::collection($result), "count" => $count]);
     }
 
     /**
@@ -204,7 +214,7 @@ class DhammaTermController extends Controller
     public function store(Request $request)
     {
         $user = AuthApi::current($request);
-        if(!$user){
+        if (!$user) {
             return $this->error(__('auth.failed'));
         }
         $validated = $request->validate([
@@ -218,17 +228,17 @@ class DhammaTermController extends Controller
          * 一个channel下面word+tag+language 唯一
          */
         $table = DhammaTerm::where('owner', $user["user_uid"])
-                ->where('word',$request->get("word"))
-                ->where('tag',$request->get("tag"));
-        if(!empty($request->get("channel"))){
-            $isDoesntExist = $table->where('channal',$request->get("channel"))
-                    ->doesntExist();
-        }else{
-            $isDoesntExist = $table->whereNull('channal')->where('language',$request->get("language"))
+            ->where('word', $request->get("word"))
+            ->where('tag', $request->get("tag"));
+        if (!empty($request->get("channel"))) {
+            $isDoesntExist = $table->where('channal', $request->get("channel"))
+                ->doesntExist();
+        } else {
+            $isDoesntExist = $table->whereNull('channal')->where('language', $request->get("language"))
                 ->doesntExist();
         }
 
-        if($isDoesntExist){
+        if ($isDoesntExist) {
             #没有重复的 插入数据
             $term = new DhammaTerm;
             $term->id = app('snowflake')->id();
@@ -241,51 +251,52 @@ class DhammaTermController extends Controller
             $term->tag = $request->get("tag");
             $term->channal = $request->get("channel");
             $term->language = $request->get("language");
-            if(!empty($request->get("channel"))){
+            if (!empty($request->get("channel"))) {
                 $channelInfo = ChannelApi::getById($request->get("channel"));
-                if(!$channelInfo){
+                if (!$channelInfo) {
                     return $this->error("channel id failed");
-                }else{
+                } else {
                     //查看有没有channel权限
-                    $power = ShareApi::getResPower($user["user_uid"],$request->get("channel"),2);
-                    if($power < 20){
+                    $power = ShareApi::getResPower($user["user_uid"], $request->get("channel"), 2);
+                    if ($power < 20) {
                         return $this->error(__('auth.failed'));
                     }
                     $term->owner = $channelInfo['studio_id'];
                     $term->language = $channelInfo['lang'];
                 }
-            }else{
-                if($request->has("studioId")){
+            } else {
+                if ($request->has("studioId")) {
                     $studioId = $request->get("studioId");
-                }else if($request->has("studioName")){
+                } else if ($request->has("studioName")) {
                     $studioId = StudioApi::getIdByName($request->get("studioName"));
                 }
-                if(Str::isUuid($studioId)){
+                if (Str::isUuid($studioId)) {
                     $term->owner = $studioId;
-                }else{
+                } else {
                     return $this->error('not valid studioId');
                 }
             }
             $term->editor_id = $user["user_id"];
-            $term->create_time = time()*1000;
-            $term->modify_time = time()*1000;
+            $term->create_time = time() * 1000;
+            $term->modify_time = time() * 1000;
             $term->save();
             //删除cache
             $this->deleteCache($term);
             return $this->ok(new TermResource($term));
-        }else{
-            return $this->error("word existed",[],200);
+        } else {
+            return $this->error("word existed", [], 200);
         }
     }
 
-    private function deleteCache($term){
-        if(empty($term->channal)){
+    private function deleteCache($term)
+    {
+        if (empty($term->channal)) {
             //通用 查询studio所有channel
-            $channels = Channel::where('owner_uid',$term->owner)->select('uid')->get();
+            $channels = Channel::where('owner_uid', $term->owner)->select('uid')->get();
             foreach ($channels as $channel) {
                 RedisClusters::forget("/term/{$channel}/{$term->word}");
             }
-        }else{
+        } else {
             RedisClusters::forget("/term/{$term->channal}/{$term->word}");
         }
     }
@@ -296,16 +307,15 @@ class DhammaTermController extends Controller
      * @param  string  $id
      * @return \Illuminate\Http\Response
      */
-    public function show(Request  $request,$id)
+    public function show(Request  $request, $id)
     {
         //
-		$result  = DhammaTerm::where('guid', $id)->first();
-		if($result){
-			return $this->ok(new TermResource($result));
-		}else{
-			return $this->error("没有查询到数据");
-		}
-
+        $result  = DhammaTerm::where('guid', $id)->first();
+        if ($result) {
+            return $this->ok(new TermResource($result));
+        } else {
+            return $this->error("没有查询到数据");
+        }
     }
 
     /**
@@ -319,24 +329,24 @@ class DhammaTermController extends Controller
     {
         //
         $user = AuthApi::current($request);
-        if(!$user){
-            return $this->error(__('auth.failed'),[],401);
+        if (!$user) {
+            return $this->error(__('auth.failed'), [], 401);
         }
         $dhammaTerm = DhammaTerm::find($id);
-        if(!$dhammaTerm){
+        if (!$dhammaTerm) {
             return $this->error('404');
         }
 
-        if(empty($dhammaTerm->channal)){
+        if (empty($dhammaTerm->channal)) {
             //查看有没有studio权限
-            if($user['user_uid'] !== $dhammaTerm->owner){
-                return $this->error(__('auth.failed'),[],403);
+            if ($user['user_uid'] !== $dhammaTerm->owner) {
+                return $this->error(__('auth.failed'), [], 403);
             }
-        }else{
+        } else {
             //查看有没有channel权限
-            $power = ShareApi::getResPower($user["user_uid"],$dhammaTerm->channal,2);
-            if($power < 20){
-                return $this->error(__('auth.failed'),[],403);
+            $power = ShareApi::getResPower($user["user_uid"], $dhammaTerm->channal, 2);
+            if ($power < 20) {
+                return $this->error(__('auth.failed'), [], 403);
             }
         }
 
@@ -348,13 +358,12 @@ class DhammaTermController extends Controller
         $dhammaTerm->tag = $request->get("tag");
         $dhammaTerm->language = $request->get("language");
         $dhammaTerm->editor_id = $user["user_id"];
-        $dhammaTerm->create_time = time()*1000;
-        $dhammaTerm->modify_time = time()*1000;
+        $dhammaTerm->create_time = time() * 1000;
+        $dhammaTerm->modify_time = time() * 1000;
         $dhammaTerm->save();
         //删除cache
         $this->deleteCache($dhammaTerm);
-		return $this->ok(new TermResource($dhammaTerm));
-
+        return $this->ok(new TermResource($dhammaTerm));
     }
 
     /**
@@ -363,28 +372,28 @@ class DhammaTermController extends Controller
      * @param  \App\Models\DhammaTerm  $dhammaTerm
      * @return \Illuminate\Http\Response
      */
-    public function destroy(DhammaTerm $dhammaTerm,Request $request)
+    public function destroy(DhammaTerm $dhammaTerm, Request $request)
     {
         /**
          * 一次删除多个单词
          */
         $user = AuthApi::current($request);
-        if(!$user){
+        if (!$user) {
             return $this->error(__('auth.failed'));
         }
         $count = 0;
-        if($request->has("uuid")){
+        if ($request->has("uuid")) {
             //查看是否有删除权限
             foreach ($request->get("id") as $key => $uuid) {
                 $term = DhammaTerm::find($uuid);
-                if($term->owner !== $user['user_uid']){
-                    if(!empty($term->channal)){
+                if ($term->owner !== $user['user_uid']) {
+                    if (!empty($term->channal)) {
                         //看是否为协作
-                        $power = ShareApi::getResPower($user['user_uid'],$term->channal);
-                        if($power < 20){
+                        $power = ShareApi::getResPower($user['user_uid'], $term->channal);
+                        if ($power < 20) {
                             continue;
                         }
-                    }else{
+                    } else {
                         continue;
                     }
                 }
@@ -392,21 +401,20 @@ class DhammaTermController extends Controller
                 //删除cache
                 $this->deleteCache($term);
             }
-        }else{
-            $arrId = json_decode($request->get("id"),true) ;
+        } else {
+            $arrId = json_decode($request->get("id"), true);
             foreach ($arrId as $key => $id) {
                 # code...
                 $term = DhammaTerm::where('id', $id)
-                                ->where('owner', $user['user_uid']);
-                $term->delete();
+                    ->where('owner', $user['user_uid']);
+                $result = $term->delete();
                 $this->deleteCache($term);
-                if($result){
+                if ($result) {
                     $count++;
                 }
             }
         }
 
-		return $this->ok($count);
+        return $this->ok($count);
     }
-
 }