1
0
Fork 0
party-rank-server/app/Http/Controllers/Api/RankController.php

151 lines
4.7 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\{PartyUser, PartyCate, UserRank, CateRank};
use Illuminate\Validation\Rule;
class RankController extends Controller
{
// 本季度排名
public function index(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();
$rankList = [];
foreach ($list as $index => $item) {
$rankList[] = [
'id' => $item->id,
'name' => $item->name,
'rank' => $index + 1,
'score' => $item->current_score,
];
}
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)
{
$request->validate([
// user: 党员排名期数, cate: 党支部排名期数
'type' => ['required', Rule::in(['user', 'cate'])]
]);
$type = $request->input('type', 'user');
$query = match($type) {
'user' => UserRank::query(),
'cate' => CateRank::query(),
};
$list = $query->select('sn')->groupBy('sn')->pluck('sn');
return $this->response()->success($list);
}
// 其他季度的排名记录
public function list(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->with([$type])->where('sn', $request->input('sn'))->orderBy('score', 'desc')->get();
$rankList = [];
foreach ($list as $index => $item) {
$rankList[] = [
'id' => $item->id,
'name' => match($type) {
'user' => $item->user?->name,
'cate' => $item->cate?->name,
},
'rank' => $index + 1,
'score' => $item->score,
];
}
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);
}
}