Jelajahi Sumber

Merge pull request #1699 from visuddhinanda/laravel

导出巴利全文搜索字典文件,分成小文件。
visuddhinanda 2 tahun lalu
induk
melakukan
5c512df25d

+ 16 - 2
app/Console/Commands/CopyUserBook.php

@@ -4,6 +4,8 @@ namespace App\Console\Commands;
 
 use Illuminate\Console\Command;
 use App\Models\CustomBookSentence;
+use App\Models\CustomBook;
+
 use App\Models\Channel;
 use App\Models\Sentence;
 use Illuminate\Support\Str;
@@ -84,9 +86,21 @@ class CopyUserBook extends Command
                 $channel->create_time = time()*1000;
                 $channel->modify_time = time()*1000;
                 $channel->status = $bookInfo->status;
-                $channel->save();
-                Log::debug('copy user book : create channel name='.$channelName);
+                $saveOk = $channel->save();
+                if($saveOk){
+                    Log::debug('copy user book : create channel success name='.$channelName);
+                }else{
+                    Log::error('copy user book : create channel fail.',['channel'=>$channelName,'book'=>$book->book]);
+                    $this->error('copy user book : create channel fail.  name='.$channelName);
+                    continue;
+                }
+            }
+            if(!Str::isUuid($channel->uid)){
+                Log::error('copy user book : channel id error.',['channel'=>$channelName,'book'=>$book->book]);
+                $this->error('copy user book : channel id error.  name='.$channelName);
+                continue;
             }
+            CustomBook::where('book_id',$book->book)->update(['channel_id'=>$channel->uid]);
 
             $bar = $this->output->createProgressBar(CustomBookSentence::where('book',$book->book)
                                                     ->count());

+ 12 - 2
app/Console/Commands/ExportFtsPali.php

@@ -52,8 +52,11 @@ class ExportFtsPali extends Command
                 return 1;
             }
         }
-        $fp = fopen($path.'/pali.syn','w') or die("Unable to open file!");
-        $count=0;
+
+        $pageSize = 10000;
+        $currPage = 1;
+        $fp = fopen($path."/pali-{$currPage}.syn",'w') or die("Unable to open file!");
+        $count = 0;
         foreach ($dictId as $key => $value) {
             $words = UserDict::where('dict_id',$value)
                              ->select('word')
@@ -64,6 +67,13 @@ class ExportFtsPali extends Command
                 if($count % 1000 === 0){
                     $this->info($count);
                 }
+                if($count % 10000 === 0){
+                    fclose($fp);
+                    $currPage++;
+                    $filename = "/pali-{$currPage}.syn";
+                    $this->info('new file filename='.$filename);
+                    $fp = fopen($path.$filename,'w') or die("Unable to open file!");
+                }
                 $parent = UserDict::where('dict_id',$value)
                              ->where('word',$word->word)
                              ->selectRaw('parent,char_length("parent")')

+ 87 - 0
app/Http/Controllers/DictInfoController.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\DictInfo;
+use Illuminate\Http\Request;
+use App\Http\Resources\DictInfoResource;
+
+class DictInfoController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        switch ($request->get('view')) {
+            case 'name':
+                $table = DictInfo::where('name',$request->get('name'));
+                break;
+
+            default:
+                # code...
+                break;
+        }
+
+        $table = $table->orderBy($request->get('order','updated_at'),
+                                $request->get('dir','desc'));
+
+        $table = $table->skip($request->get('offset',0))
+                       ->take($request->get('limit',100));
+
+        $result = $table->get();
+        $count = count($result);
+        return $this->ok([
+                            "rows"=>DictInfoResource::collection($result),
+                            "count"=>$count
+                        ]);
+    }
+
+    /**
+     * 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\DictInfo  $dictInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function show(DictInfo $dictInfo)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\DictInfo  $dictInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, DictInfo $dictInfo)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\DictInfo  $dictInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(DictInfo $dictInfo)
+    {
+        //
+    }
+}

+ 105 - 0
app/Http/Controllers/DictVocabularyController.php

@@ -0,0 +1,105 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\UserDict;
+use App\Models\DictInfo;
+use Illuminate\Http\Request;
+use App\Http\Resources\DictVocabularyResource;
+
+
+class DictVocabularyController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        switch ($request->get("view")) {
+            case 'dict_name':
+                $id = DictInfo::where('name',$request->get("name"))->value('id');
+                if(!$id){
+                    return $this->error('name:'.$request->get("name").' can not found.',200,200);
+                }
+                $table = UserDict::where('dict_id',$id)
+                                ->groupBy('word')
+                                ->selectRaw('word,count(*)');
+                break;
+            case 'dict_short_name':
+                    $id = DictInfo::where('shortname',$request->get("name"))->value('id');
+                    if(!$id){
+                        return $this->error('name:'.$request->get("name").' can not found.',200,200);
+                    }
+                    $table = UserDict::where('dict_id',$id)
+                                    ->groupBy('word')
+                                    ->selectRaw('word,count(*)');
+                    break;
+
+        }
+        if($request->get("stream") === 'true'){
+            return response()->streamDownload(function () use ($table) {
+                $result = $table->get();
+                echo json_encode($result);
+            },'dict.txt');
+        }
+        $count = 2;
+        $table = $table->orderBy('word',$request->get('dir','asc'));
+
+        $table = $table->skip($request->get('offset',0))
+                       ->take($request->get('limit',1000));
+
+        $result = $table->get();
+        return $this->ok([
+                            "rows"=>DictVocabularyResource::collection($result),
+                            "count"=>$count
+                        ]);
+    }
+
+    /**
+     * 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\UserDict  $userDict
+     * @return \Illuminate\Http\Response
+     */
+    public function show(UserDict $userDict)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\UserDict  $userDict
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, UserDict $userDict)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\UserDict  $userDict
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(UserDict $userDict)
+    {
+        //
+    }
+}

+ 73 - 0
app/Http/Controllers/PgPaliDictDownloadController.php

@@ -0,0 +1,73 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\UserDict;
+use Illuminate\Http\Request;
+
+class PgPaliDictDownloadController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        $currPage = $request->get('page',1);
+        $path = storage_path('app/export/fts');
+        $filename = $path."/pali-{$currPage}.syn";
+        if(file_exists($filename)){
+            $content = file_get_contents($filename);
+            return $this->ok($content);
+        }else{
+            return $this->error('no file',200,200);
+        }
+
+    }
+
+    /**
+     * 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\UserDict  $userDict
+     * @return \Illuminate\Http\Response
+     */
+    public function show(UserDict $userDict)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\UserDict  $userDict
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, UserDict $userDict)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\UserDict  $userDict
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(UserDict $userDict)
+    {
+        //
+    }
+}

+ 19 - 0
app/Http/Resources/DictInfoResource.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class DictInfoResource 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 parent::toArray($request);
+    }
+}

+ 19 - 0
app/Http/Resources/DictVocabularyResource.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class DictVocabularyResource 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 parent::toArray($request);
+    }
+}

+ 0 - 13
app/Tools/PaliSearch.php

@@ -73,19 +73,6 @@ class PaliSearch
         return $output;
     }
 
-    public static function upload_dict($data){
-        $client = PaliSearch::connect();
-
-        $request = new \Mint\Tulip\V1\UploadDictionaryRequest();
-        $request->setData($data);
-
-        list($response, $status) = $client->UploadDictionary($request)->wait();
-        if ($status->code !== \Grpc\STATUS_OK) {
-            Log::error("ERROR: " . $status->code . ", " . $status->details);
-            return false;
-        }
-        return $response->getError();
-    }
 
     public static function update($book,$paragraph,
                                   $bold1,$bold2,$bold3,

+ 6 - 0
routes/api.php

@@ -70,6 +70,9 @@ use App\Http\Controllers\HealthCheckController;
 use App\Http\Controllers\OfflineIndexController;
 use App\Http\Controllers\TaskController;
 use App\Http\Controllers\ExportController;
+use App\Http\Controllers\DictVocabularyController;
+use App\Http\Controllers\DictInfoController;
+use App\Http\Controllers\PgPaliDictDownloadController;
 
 /*
 |--------------------------------------------------------------------------
@@ -192,6 +195,9 @@ Route::group(['prefix' => 'v2'],function(){
     Route::apiResource('offline-index',OfflineIndexController::class);
     Route::apiResource('task',TaskController::class);
     Route::apiResource('export',ExportController::class);
+    Route::apiResource('dict-vocabulary',DictVocabularyController::class);
+    Route::apiResource('dict-info',DictInfoController::class);
+    Route::apiResource('pg-pali-dict-download',PgPaliDictDownloadController::class);
 
     Route::get('download/{type1}/{type2}/{uuid}/{filename}', function ($type1,$type2,$uuid,$filename) {
         header("Content-Type: {$type1}/{$type1}");