[exam] add progress do update the same time

This commit is contained in:
xiaomlove
2021-04-27 02:44:44 +08:00
parent 465fd2bca8
commit d1b7561aae
17 changed files with 97 additions and 81 deletions
+1 -2
View File
@@ -45,8 +45,7 @@ class Test extends Command
public function handle()
{
$rep = new ExamRepository();
// $r = $rep->assignToUser(3);
echo new A;
$r = $rep->addProgress(1, 1, 250, 1);
dd($r);
}
}
+3 -3
View File
@@ -22,13 +22,13 @@ class Exam extends NexusModel
];
const INDEX_UPLOADED = 1;
const INDEX_SEED_TIME_AVERGAGE = 2;
const INDEX_SEED_TIME_AVERAGE = 2;
const INDEX_DOWNLOADED = 3;
const INDEX_BONUS = 4;
public static $indexes = [
self::INDEX_UPLOADED => ['name' => 'Uploaded', 'unit' => 'GB'],
self::INDEX_SEED_TIME_AVERGAGE => ['name' => 'Seed Time Average', 'unit' => 'Hour'],
self::INDEX_SEED_TIME_AVERAGE => ['name' => 'Seed Time Average', 'unit' => 'Hour'],
self::INDEX_DOWNLOADED => ['name' => 'Downloaded', 'unit' => 'GB'],
self::INDEX_BONUS => ['name' => 'Bonus', 'unit' => ''],
];
@@ -41,7 +41,7 @@ class Exam extends NexusModel
self::FILTER_USER_REGISTER_TIME_RANGE => ['name' => 'User Register Time Range'],
];
public function getStatusTextAttribute()
public function getStatusTextAttribute(): string
{
return self::$status[$this->status]['text'] ?? '';
}
+2 -2
View File
@@ -4,7 +4,7 @@ namespace App\Models;
class ExamUser extends NexusModel
{
protected $fillable = ['exam_id', 'uid', 'status', 'result'];
protected $fillable = ['exam_id', 'uid', 'status', 'progress'];
public $timestamps = true;
@@ -17,7 +17,7 @@ class ExamUser extends NexusModel
];
protected $casts = [
'result' => 'json'
'progress' => 'json'
];
public function getStatusTextAttribute()
+1 -1
View File
@@ -11,7 +11,7 @@ class NexusModel extends Model
public $timestamps = false;
protected $perPage = 2;
// protected $perPage = 2;
/**
* 为数组 / JSON 序列化准备日期。
-2
View File
@@ -57,8 +57,6 @@ class User extends Authenticatable
self::CLASS_STAFF_LEADER => ['text' => 'Staff Leader'],
];
protected $perPage = 2;
public function getClassTextAttribute(): string
{
return self::$classes[$this->class]['text'] ?? '';
+20 -8
View File
@@ -208,6 +208,7 @@ class ExamRepository extends BaseRepository
public function addProgress(int $examUserId, int $indexId, int $value, int $torrentId)
{
$logPrefix = "examUserId: $examUserId, indexId: $indexId, value: $value, torrentId: $torrentId";
$examUser = ExamUser::query()->with(['exam', 'user'])->findOrFail($examUserId);
if ($examUser->status != ExamUser::STATUS_NORMAL) {
throw new \InvalidArgumentException("ExamUser: $examUserId is not normal.");
@@ -226,7 +227,7 @@ class ExamRepository extends BaseRepository
}
$torrentFields = ['id', 'visible', 'banned'];
$torrent = Torrent::query()->findOrFail($torrentId, $torrentFields);
$torrent->checkIsNormal(true, $torrentFields);
$torrent->checkIsNormal($torrentFields);
$user = $examUser->user;
$user->checkIsNormal();
@@ -238,8 +239,12 @@ class ExamRepository extends BaseRepository
'index' => $indexId,
'value' => $value,
];
do_log('[addProgress] ' . nexus_json_encode($data));
return $examUser->progresses()->create($data);
do_log("$logPrefix [addProgress] " . nexus_json_encode($data));
$newProgress = $examUser->progresses()->create($data);
$examProgress = $this->calculateProgress($examUser);
do_log("$logPrefix [updateProgress] " . nexus_json_encode($examProgress));
$examUser->update(['progress' => $examProgress]);
return $newProgress;
}
public function getUserExamProgress($uid, $status = null)
@@ -256,11 +261,17 @@ class ExamRepository extends BaseRepository
if ($examUsers->count() > 1) {
do_log("$logPrefix, user exam more than 1.", 'warning');
}
/** @var ExamUser $examUser */
$examUser = $examUsers->first();
/** @var Exam $exam */
$progress = $this->calculateProgress($examUser);
do_log("$logPrefix, progress: " . nexus_json_encode($progress));
$examUser->progress = $progress;
return $examUser;
}
private function calculateProgress(ExamUser $examUser)
{
$exam = $examUser->exam;
$logPrefix .= ", exam: " . $exam->id;
$logPrefix = ", examUser: " . $examUser->id;
if ($examUser->begin) {
$logPrefix .= ", begin from examUser: " . $examUser->id;
$begin = $examUser->begin;
@@ -289,8 +300,9 @@ class ExamRepository extends BaseRepository
->get();
do_log("$logPrefix, query: " . last_query() . ", progressSum: " . $progressSum->toJson());
$examUser->progress = $progressSum->pluck('sum', 'index')->toArray();
return $examUser;
return $progressSum->pluck('sum', 'index')->toArray();
}