mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-14 12:30:49 +08:00
user-detail
This commit is contained in:
@@ -44,8 +44,6 @@ class ExamController extends Controller
|
||||
'name' => 'required|string',
|
||||
'indexes' => 'required|array|min:1',
|
||||
'status' => 'required|in:0,1',
|
||||
// 'begin' => 'nullable|date',
|
||||
// 'end' => 'nullable|date',
|
||||
];
|
||||
$request->validate($rules);
|
||||
$result = $this->repository->store($request->all());
|
||||
@@ -104,20 +102,4 @@ class ExamController extends Controller
|
||||
return $this->success($result);
|
||||
}
|
||||
|
||||
public function users(Request $request)
|
||||
{
|
||||
$result = $this->repository->listUser($request->all());
|
||||
$resource = ExamUserResource::collection($result);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
public function progress(Request $request)
|
||||
{
|
||||
$result = $this->repository->getUserExamProgress(Auth::id());
|
||||
$resource = new ExamUserResource($result);
|
||||
return $resource;
|
||||
// dd($resource->response()->getData(true));
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
87
app/Http/Controllers/ExamUserController.php
Normal file
87
app/Http/Controllers/ExamUserController.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Resources\ExamResource;
|
||||
use App\Http\Resources\ExamUserResource;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Repositories\ExamRepository;
|
||||
use App\Repositories\UserRepository;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class ExamUserController extends Controller
|
||||
{
|
||||
private $repository;
|
||||
|
||||
public function __construct(ExamRepository $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$result = $this->repository->listUser($request->all());
|
||||
$resource = ExamUserResource::collection($result);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$rules = [
|
||||
'uid' => 'required',
|
||||
];
|
||||
$request->validate($rules);
|
||||
$result = $this->repository->assignToUser($request->uid, $request->exam_id, $request->begin, $request->end);
|
||||
$resource = new ExamResource($result);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return array
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return array
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return array
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$result = $this->repository->removeExamUser($id);
|
||||
return $this->success($result, 'Remove user exam success!');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -56,11 +56,12 @@ class UserController extends Controller
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
* @return array
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
//
|
||||
$result = $this->repository->getDetail($id);
|
||||
return $this->success($result);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -113,7 +114,7 @@ class UserController extends Controller
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
public function exams()
|
||||
public function matchExams()
|
||||
{
|
||||
$id = Auth::id();
|
||||
$examRepository = new ExamRepository();
|
||||
|
||||
@@ -25,8 +25,11 @@ class ExamUserResource extends JsonResource
|
||||
'status_text' => $this->statusText,
|
||||
'created_at' => formatDatetime($this->created_at),
|
||||
'progress' => $this->when($this->progress, $this->progress),
|
||||
'progress_formatted' => $this->when($this->progress_formatted, $this->progress_formatted),
|
||||
'begin' => formatDatetime($this->begin),
|
||||
'end' => formatDatetime($this->end),
|
||||
'uid' => $this->uid,
|
||||
'exam_id' => $this->exam_id,
|
||||
'user' => new UserResource($this->whenLoaded('user')),
|
||||
'exam' => new ExamResource($this->whenLoaded('exam')),
|
||||
];
|
||||
|
||||
@@ -100,6 +100,11 @@ class User extends Authenticatable
|
||||
'added' => 'datetime',
|
||||
];
|
||||
|
||||
public static $commonFields = [
|
||||
'id', 'username', 'email', 'class', 'status', 'added', 'avatar',
|
||||
'uploaded', 'downloaded', 'seedbonus', 'seedtime', 'leechtime'
|
||||
];
|
||||
|
||||
public function checkIsNormal(array $fields = ['status', 'enabled'])
|
||||
{
|
||||
if (in_array('visible', $fields) && $this->getAttribute('status') != self::STATUS_CONFIRMED) {
|
||||
|
||||
@@ -9,6 +9,7 @@ use App\Models\Torrent;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ExamRepository extends BaseRepository
|
||||
{
|
||||
@@ -150,13 +151,13 @@ class ExamRepository extends BaseRepository
|
||||
/**
|
||||
* assign exam to user
|
||||
*
|
||||
* @param $uid
|
||||
* @param int $examId
|
||||
* @param int $uid
|
||||
* @param null $examId
|
||||
* @param null $begin
|
||||
* @param null $end
|
||||
* @return mixed
|
||||
*/
|
||||
public function assignToUser($uid, $examId = 0, $begin = null, $end = null)
|
||||
public function assignToUser(int $uid, $examId = null, $begin = null, $end = null)
|
||||
{
|
||||
$logPrefix = "uid: $uid, examId: $examId, begin: $begin, end: $end";
|
||||
if ($examId > 0) {
|
||||
@@ -247,13 +248,16 @@ class ExamRepository extends BaseRepository
|
||||
return $newProgress;
|
||||
}
|
||||
|
||||
public function getUserExamProgress($uid, $status = null)
|
||||
public function getUserExamProgress($uid, $status = null, $with = ['exam', 'user'])
|
||||
{
|
||||
$logPrefix = "uid: $uid";
|
||||
$query = ExamUser::query()->with(['exam', 'user'])->where('uid', $uid)->orderBy('exam_id', 'desc');
|
||||
$query = ExamUser::query()->where('uid', $uid)->orderBy('exam_id', 'desc');
|
||||
if ($status) {
|
||||
$query->where('status', $status);
|
||||
}
|
||||
if (!empty($with)) {
|
||||
$query->with($with);
|
||||
}
|
||||
$examUsers = $query->get();
|
||||
if ($examUsers->isEmpty()) {
|
||||
return null;
|
||||
@@ -262,9 +266,15 @@ class ExamRepository extends BaseRepository
|
||||
do_log("$logPrefix, user exam more than 1.", 'warning');
|
||||
}
|
||||
$examUser = $examUsers->first();
|
||||
$exam = $examUser->exam;
|
||||
if (empty($examUser->begin) || empty($examUser->end)) {
|
||||
$examUser->begin = $exam->begin;
|
||||
$examUser->end = $exam->end;
|
||||
}
|
||||
$progress = $this->calculateProgress($examUser);
|
||||
do_log("$logPrefix, progress: " . nexus_json_encode($progress));
|
||||
$examUser->progress = $progress;
|
||||
$examUser->progress_formatted = $this->getProgressFormatted($exam, $progress);
|
||||
return $examUser;
|
||||
}
|
||||
|
||||
@@ -305,6 +315,49 @@ class ExamRepository extends BaseRepository
|
||||
|
||||
}
|
||||
|
||||
private function getProgressFormatted(Exam $exam, array $progress, $locale = null)
|
||||
{
|
||||
$result = [];
|
||||
foreach ($exam->indexes as $key => $index) {
|
||||
if (!isset($index['checked']) || !$index['checked']) {
|
||||
continue;
|
||||
}
|
||||
$currentValue = $progress[$index['index']] ?? 0;
|
||||
$requireValue = $index['require_value'];
|
||||
switch ($index['index']) {
|
||||
case Exam::INDEX_UPLOADED:
|
||||
case Exam::INDEX_DOWNLOADED:
|
||||
$currentValueFormatted = mksize($currentValue);
|
||||
$requireValueAtomic = $requireValue * 1024 * 1024 * 1024;
|
||||
break;
|
||||
case Exam::INDEX_SEED_TIME_AVERAGE:
|
||||
$currentValueFormatted = mkprettytime($currentValue);
|
||||
$requireValueAtomic = $requireValue * 3600;
|
||||
break;
|
||||
default:
|
||||
$currentValueFormatted = $currentValue;
|
||||
$requireValueAtomic = $requireValue;
|
||||
}
|
||||
$index['require_value_formatted'] = "$requireValue {$index['unit']}";
|
||||
$index['current_value'] = $currentValue;
|
||||
$index['current_value_formatted'] = $currentValueFormatted;
|
||||
$index['passed'] = $currentValue >= $requireValueAtomic;
|
||||
$result[] = $index;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
public function removeExamUser(int $examUserId)
|
||||
{
|
||||
$examUser = ExamUser::query()->findOrFail($examUserId);
|
||||
$result = DB::transaction(function () use ($examUser) {
|
||||
$examUser->progresses()->delete();
|
||||
return $examUser->delete();
|
||||
});
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<?php
|
||||
namespace App\Repositories;
|
||||
|
||||
use App\Http\Resources\ExamUserResource;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Models\ExamUser;
|
||||
use App\Models\Setting;
|
||||
use App\Models\User;
|
||||
|
||||
@@ -20,6 +23,27 @@ class UserRepository extends BaseRepository
|
||||
return $user;
|
||||
}
|
||||
|
||||
public function getDetail($id)
|
||||
{
|
||||
$user = User::query()->findOrFail($id, User::$commonFields);
|
||||
$userResource = new UserResource($user);
|
||||
$baseInfo = $userResource->response()->getData(true)['data'];
|
||||
|
||||
$examRep = new ExamRepository();
|
||||
$examProgress = $examRep->getUserExamProgress($id, ExamUser::STATUS_NORMAL, ['exam']);
|
||||
if ($examProgress) {
|
||||
$examResource = new ExamUserResource($examProgress);
|
||||
$examInfo = $examResource->response()->getData(true)['data'];
|
||||
} else {
|
||||
$examInfo = null;
|
||||
}
|
||||
|
||||
return [
|
||||
'base_info' => $baseInfo,
|
||||
'exam_info' => $examInfo,
|
||||
];
|
||||
}
|
||||
|
||||
public function store(array $params)
|
||||
{
|
||||
$password = $params['password'];
|
||||
|
||||
Reference in New Issue
Block a user