From 15463a5b902acfb65f25b59fc5da6b800cebda18 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Fri, 8 Dec 2023 16:55:30 +0800 Subject: [PATCH] api --- app/Admin/Controllers/ArticleController.php | 2 +- app/Admin/Controllers/PartyUserController.php | 1 + .../Controllers/Api/ArticleController.php | 10 +-- app/Http/Controllers/Api/AuthController.php | 4 +- app/Http/Controllers/Api/RankController.php | 63 ++++++++++++++++++- app/Http/Resources/ArticleResource.php | 1 + app/Models/Article.php | 5 ++ routes/api.php | 4 ++ 8 files changed, 81 insertions(+), 9 deletions(-) diff --git a/app/Admin/Controllers/ArticleController.php b/app/Admin/Controllers/ArticleController.php index 06de6c1..ab5c502 100644 --- a/app/Admin/Controllers/ArticleController.php +++ b/app/Admin/Controllers/ArticleController.php @@ -50,7 +50,7 @@ class ArticleController extends AdminController return $this->baseForm()->title('')->body([ amisMake()->TextControl()->name('title')->label(__('article.title'))->required(true), amisMake()->SelectControl()->name('category_id')->label(__('article.category_id'))->options($this->getCategoryOptions())->required(), - amisMake()->SelectControl()->name('party_cate_id')->label(__('article.party_cate_id'))->options($this->getPartyCateOptions()), + amisMake()->SelectControl()->name('party_cate_id')->label(__('article.party_cate_id'))->options($this->getPartyCateOptions())->searchable(), amisMake()->ImageControl()->name('cover')->label(__('article.cover'))->autoUpload(true), Components::make()->sortControl('sort', __('article.sort')), amisMake()->DateTimeControl()->name('published_at')->label(__('article.published_at'))->value(now())->format('YYYY-MM-DD HH:mm:ss')->description('*不填写则默认为创建时间'), diff --git a/app/Admin/Controllers/PartyUserController.php b/app/Admin/Controllers/PartyUserController.php index af24ece..2c7b7a8 100644 --- a/app/Admin/Controllers/PartyUserController.php +++ b/app/Admin/Controllers/PartyUserController.php @@ -32,6 +32,7 @@ class PartyUserController extends AdminController ])) ->columns([ amisMake()->TableColumn()->name('id')->label(__('party_user.id')), + amisMake()->TableColumn()->name('username')->label(__('party_user.username')), amisMake()->TableColumn()->name('name')->label(__('party_user.name')), amisMake()->TableColumn()->type('avatar')->src('${avatar}')->name('avatar')->label(__('party_user.avatar')), amisMake()->TableColumn()->name('cate.name')->label(__('party_user.cate_id')), diff --git a/app/Http/Controllers/Api/ArticleController.php b/app/Http/Controllers/Api/ArticleController.php index 583a0be..fcf9fec 100644 --- a/app/Http/Controllers/Api/ArticleController.php +++ b/app/Http/Controllers/Api/ArticleController.php @@ -14,12 +14,12 @@ class ArticleController extends Controller { $category = Keyword::where('key', 'category_1')->first(); if (!$category) { - return $this->response()->error('文章不存在'); + return $this->response()->fail('文章不存在'); } $article = Article::where('category_id', $category->id)->publish()->sort()->first(); if (!$article) { - return $this->response()->success([]); + return $this->response()->success(''); } return $this->response()->success(ArticleResource::make($article)); @@ -31,12 +31,12 @@ class ArticleController extends Controller $user = auth('api')->user(); $category = Keyword::where('key', 'category_2')->first(); if (!$category) { - return $this->response()->error('文章不存在'); + return $this->response()->fail('文章不存在'); } - $article = Article::where('category_id', $category->id)->where('party_cate_id', $user->cate_id)->publish()->sort()->first(); + $article = Article::with(['partyCate'])->where('category_id', $category->id)->where('party_cate_id', $user->cate_id)->publish()->sort()->first(); if (!$article) { - return $this->response()->success([]); + return $this->response()->success(''); } return $this->response()->success(ArticleResource::make($article)); diff --git a/app/Http/Controllers/Api/AuthController.php b/app/Http/Controllers/Api/AuthController.php index aefe9a9..fa85c4a 100644 --- a/app/Http/Controllers/Api/AuthController.php +++ b/app/Http/Controllers/Api/AuthController.php @@ -17,8 +17,8 @@ class AuthController extends Controller ]); $user = PartyUser::where('username', $request->input('username'))->first(); - if (!Hash::check($request->input('password'), $user->password)) { - throw new BaseException('用户名或密码错误'); + if (!$user || !Hash::check($request->input('password'), $user->password)) { + return $this->response()->fail('用户名或密码错误'); } // 更新第三方账户 // $openid = $request->input('openid'); diff --git a/app/Http/Controllers/Api/RankController.php b/app/Http/Controllers/Api/RankController.php index 318da59..4570ed8 100644 --- a/app/Http/Controllers/Api/RankController.php +++ b/app/Http/Controllers/Api/RankController.php @@ -39,6 +39,38 @@ class RankController extends Controller return $this->response()->success($rankList); } + // 当前用户本季度排名 + public function current(Request $request) + { + $request->validate([ + // user: 党员, cate: 党支部 + 'type' => ['required', Rule::in(['user', 'cate'])] + ]); + $type = $request->input('type', 'user'); + $query = match($type) { + 'user' => PartyUser::query(), + 'cate' => PartyCate::query(), + }; + $query->orderBy('current_score', 'desc'); + if ($request->filled('limit')) { + $query->limit($request->input('limit')); + } + $list = $query->get(); + $user = auth('api')->user(); + $rank = ['score' => '-', 'rank' => '-']; + foreach ($list as $index => $item) { + if ($item->id == match($type) { + 'user' => $user->id, + 'cate' => $user->cate_id + }) { + $rank['score'] = $item->score; + $rank['rank'] = $index + 1; + } + } + + return $this->response()->success($rank); + } + // 获取已有的期数 public function dates(Request $request) { @@ -56,7 +88,7 @@ class RankController extends Controller return $this->response()->success($list); } - // 党员其他季度的排名记录 + // 其他季度的排名记录 public function list(Request $request) { $request->validate([ @@ -86,4 +118,33 @@ class RankController extends Controller return $this->response()->success($rankList); } + + public function currentList(Request $request) + { + $request->validate([ + // 期数 + 'sn' => 'required', + // user: 党员, cate: 党支部 + 'type' => ['required', Rule::in(['user', 'cate'])] + ]); + $type = $request->input('type', 'user'); + $query = match($type) { + 'user' => UserRank::query(), + 'cate' => CateRank::query(), + }; + $list = $query->where('sn', $request->input('sn'))->orderBy('score', 'desc')->get(); + $user = auth('api')->user(); + $rank = ['score' => '-', 'rank' => '-']; + foreach ($list as $index => $item) { + if (match($type) { + 'user' => $item->user_id == $user->id, + 'cate' => $item->cate_id == $user->cate_id, + }) { + $rank['score'] = $item->score; + $rank['rank'] = $index + 1; + } + } + + return $this->response()->success($rank); + } } diff --git a/app/Http/Resources/ArticleResource.php b/app/Http/Resources/ArticleResource.php index ca29173..79eece8 100644 --- a/app/Http/Resources/ArticleResource.php +++ b/app/Http/Resources/ArticleResource.php @@ -18,6 +18,7 @@ class ArticleResource extends JsonResource 'id' => $this->id, 'title' => $this->title, 'content' => $this->content, + 'party_cate' => $this->whenLoaded('partyCate') ]; } } diff --git a/app/Models/Article.php b/app/Models/Article.php index 08ca5c1..a31ad30 100644 --- a/app/Models/Article.php +++ b/app/Models/Article.php @@ -41,6 +41,11 @@ class Article extends Model return $this->belongsTo(Keyword::class, 'category_id'); } + public function partyCate() + { + return $this->belongsTo(PartyCate::class, 'party_cate_id'); + } + public function scopeSort($q) { $q->orderBy('sort', 'asc')->latest('published_at')->latest('id'); diff --git a/routes/api.php b/routes/api.php index aafa580..733a192 100644 --- a/routes/api.php +++ b/routes/api.php @@ -17,6 +17,7 @@ use Illuminate\Support\Facades\Route; Route::post('web/upload', [\App\Http\Controllers\WebController::class, 'upload']); Route::get('keyword', [\App\Http\Controllers\Api\KeywordController::class, 'index']); +Route::get('banner', [\App\Http\Controllers\Api\BannerController::class, 'index']); Route::post('login', [\App\Http\Controllers\Api\AuthController::class, 'login']); @@ -34,4 +35,7 @@ Route::group(['middleware' => 'auth:api'], function () { Route::post('user/profile', [\App\Http\Controllers\Api\AccountController::class, 'update']); Route::get('article/cate', [\App\Http\Controllers\Api\ArticleController::class, 'cate']); + + Route::get('rank/current', [\App\Http\Controllers\Api\RankController::class, 'current']); + Route::get('rank/current-list', [\App\Http\Controllers\Api\RankController::class, 'currentList']); });