visuddhinanda 3 лет назад
Родитель
Сommit
243cf270e4

+ 113 - 0
app/Http/Controllers/UserOperationDailyController.php

@@ -0,0 +1,113 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\UserOperationDaily;
+use Illuminate\Http\Request;
+use App\Http\Api\AuthApi;
+use App\Http\Api\UserApi;
+
+class UserOperationDailyController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        switch ($request->get('view')) {
+            case "user-all":
+                $queryUserUuid = UserApi::getIdByName($request->get('studio_name'));
+                $user = AuthApi::current($request);
+                if(!$user){
+                    return $this->error(__('auth.failed'));
+                }
+                //TODO 判断是否有查看权限
+                if($queryUserUuid !== $user["user_uid"]){
+                    return $this->error(__('auth.failed'));
+                }
+                $result = UserOperationDaily::where('user_id',$user["user_id"])
+                                  ->select(['date_int','duration','hit'])
+                                  ->orderBy("date_int")
+                                  ->get();
+                break;
+            case "user-year":
+                $queryUserId = UserApi::getIntIdByName($request->get('studio_name'));
+                //TODO 判断是否有查看权限
+                $result = UserOperationDaily::where('user_id',$queryUserId)
+                                  ->select(['date_int','duration'])
+                                  ->orderBy("date_int")
+                                  ->get();
+                break;
+        }
+        return $this->ok(["rows"=>$result,"count"=>count($result)]);
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * 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\UserOperationDaily  $userOperationDaily
+     * @return \Illuminate\Http\Response
+     */
+    public function show(UserOperationDaily $userOperationDaily)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\Models\UserOperationDaily  $userOperationDaily
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(UserOperationDaily $userOperationDaily)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\UserOperationDaily  $userOperationDaily
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, UserOperationDaily $userOperationDaily)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\UserOperationDaily  $userOperationDaily
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(UserOperationDaily $userOperationDaily)
+    {
+        //
+    }
+}

+ 149 - 0
app/Http/Controllers/UserStatisticController.php

@@ -0,0 +1,149 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\UserOperationDaily;
+use App\Models\UserOperationLog;
+use App\Models\Wbw;
+use App\Models\Sentence;
+use App\Models\DhammaTerm;
+use App\Models\UserDict;
+use Illuminate\Http\Request;
+use App\Http\Api\AuthApi;
+use App\Http\Api\UserApi;
+use Illuminate\Support\Facades\Cache;
+
+class UserStatisticController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * 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\UserOperationDaily  $userOperationDaily
+     * @return \Illuminate\Http\Response
+     */
+    public function show(string $userName)
+    {
+        //
+        $queryUserId = UserApi::getIntIdByName($userName);
+        $queryUserUuid = UserApi::getIdByName($userName);
+        $cacheExpiry = 600;
+        //总经验值
+        $expSum = Cache::remember("user/{$userName}/exp/sum",$cacheExpiry,function() use($queryUserId){
+			return UserOperationDaily::where('user_id',$queryUserId)
+                                     ->sum('duration');
+		});
+
+        //逐词解析
+        $wbwCount = Cache::remember("user/{$userName}/wbw/count",$cacheExpiry,function() use($queryUserId){
+                    return Wbw::where('editor_id',$queryUserId)
+                        ->count();
+                        });
+        //查字典
+        $lookupCount = Cache::remember("user/{$userName}/lookup/count",$cacheExpiry,function() use($queryUserId){
+                            return UserOperationDaily::where('user_id',$queryUserId)
+                                    ->count();
+                                });
+        //译文
+        //TODO 判断是否是译文channel
+        $translationCount = Cache::remember("user/{$userName}/translation/count",$cacheExpiry,function() use($queryUserUuid){
+                            return Sentence::where('editor_uid',$queryUserUuid)
+                                           ->count();
+                            });
+        $translationCountPub = Cache::remember("user/{$userName}/translation/count-pub",$cacheExpiry,function() use($queryUserUuid){
+                                    return Sentence::where('editor_uid',$queryUserUuid)
+                                    ->where('status',30)
+                                    ->count();
+                                });
+        //术语
+        $termCount = Cache::remember("user/{$userName}/term/count",$cacheExpiry,function() use($queryUserId){
+                        return DhammaTerm::where('editor_id',$queryUserId)
+                                    ->count();
+                    });
+        $termCountWithNote = Cache::remember("user/{$userName}/term/count-note",$cacheExpiry,function() use($queryUserId){
+                                return DhammaTerm::where('editor_id',$queryUserId)
+                                                    ->where('note',"<>","")
+                                                    ->count();
+                                });
+        //单词本
+        $myDictCount = Cache::remember("user/{$userName}/dict/count",$cacheExpiry,function() use($queryUserId){
+                            return UserDict::where('creator_id',$queryUserId)
+                                        ->count();
+                        });
+
+        return $this->ok([
+            "exp" => ["sum"=>(int)$expSum],
+            "wbw" => ["count"=>(int)$wbwCount],
+            "lookup" => ["count"=>(int)$lookupCount],
+            "translation" =>["count"=>(int)$translationCount,
+                             "count_pub"=>(int)$translationCountPub],
+            "term" => ["count"=>(int)$termCount,
+                      "count_with_note"=>(int)$termCountWithNote],
+            "dict" => ["count"=>(int)$myDictCount],
+        ]);
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\Models\UserOperationDaily  $userOperationDaily
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(UserOperationDaily $userOperationDaily)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\UserOperationDaily  $userOperationDaily
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, UserOperationDaily $userOperationDaily)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\UserOperationDaily  $userOperationDaily
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(UserOperationDaily $userOperationDaily)
+    {
+        //
+    }
+}

+ 33 - 0
app/Http/Resources/ChannelResource.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class ChannelResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
+     */
+    public function toArray($request)
+    {
+        $data = [
+            "uid" => $this->uid,
+            "name" => $this->name,
+            "summary" => $this->summary,
+            "type" => $this->type,
+            "studio" => \App\Http\Api\StudioApi::getById($this->owner_uid),
+            "lang" => $this->lang,
+            "status" => $this->status,
+            "created_at" => $this->created_at,
+            "updated_at" => $this->updated_at,
+        ];
+        if(isset($this->role)){
+            $data["role"] = $this->role;
+        }
+        return $data;
+    }
+}

+ 58 - 0
app/Http/Resources/TocResource.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Resources\Json\JsonResource;
+use App\Models\ProgressChapter;
+
+class TocResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
+     */
+    public function toArray($request)
+    {
+        $data = [
+            "book"=>$this->book,
+            "paragraph"=> $this->paragraph,
+            "pali_title"=> $this->toc,
+            "level"=>$this->level
+        ];
+
+        $title= ProgressChapter::where('book',$this->book)
+                                        ->where('para',$this->paragraph)
+                                        ->where('lang','zh')
+                                        ->whereNotNull('title')
+                                        ->value('title');
+        if(!empty($title)){
+            $data['title'] = $title;
+        }
+        if($request->has('channels')){
+            $channels = explode(',',$request->get('channels'));
+            $title= ProgressChapter::where('book',$this->book)
+                                ->where('para',$this->paragraph)
+                                ->where('channel_id',$channels[0])
+                                ->whereNotNull('title')
+                                ->value('title');
+            if(!empty($title)){
+                $data['title'] = $title;
+            }
+            //查询完成度
+            foreach ($channels as $key => $channel) {
+                $progress= ProgressChapter::where('book',$this->book)
+                                ->where('para',$this->paragraph)
+                                ->where('channel_id',$channel)
+                                ->value('progress');
+                if($progress){
+                    $data['progress'][] = $progress;
+                }else{
+                    $data['progress'][] = 0;
+                }
+            }
+        }
+        return $data;
+    }
+}