fix exam duration

This commit is contained in:
xiaomlove
2021-05-08 16:25:55 +08:00
parent 5241780cdd
commit d23a85a888
31 changed files with 54 additions and 31 deletions
+3 -2
View File
@@ -46,7 +46,7 @@ class ExamController extends Controller
'name' => 'required|string',
'indexes' => 'required|array|min:1',
'indexes.*.index' => ['required', Rule::in(array_keys(Exam::$indexes))],
'indexes.*.require_value' => 'required|numeric',
'indexes.*.require_value' => 'nullable|numeric',
'status' => 'required|in:0,1',
'duration' => 'nullable|numeric'
];
@@ -81,7 +81,8 @@ class ExamController extends Controller
$rules = [
'name' => 'required|string',
'indexes' => 'required|array|min:1',
'indexes.*.name' => 'required',
'indexes.*.index' => ['required', Rule::in(array_keys(Exam::$indexes))],
'indexes.*.require_value' => 'nullable|numeric',
'status' => 'required|in:0,1',
'duration' => 'nullable|numeric'
];
+1 -1
View File
@@ -23,7 +23,7 @@ class ExamResource extends JsonResource
'description' => $this->description,
'begin' => $this->begin,
'end' => $this->end,
'duration' => $this->duration,
'duration' => $this->duration ?: '',
'duration_text' => $this->duration_text,
'filters' => $this->filters,
'filters_formatted' => $this->formatFilters($this->resource),
+14 -2
View File
@@ -2,6 +2,8 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Exam extends NexusModel
{
protected $fillable = ['name', 'description', 'begin', 'end', 'duration', 'status', 'is_discovered', 'filters', 'indexes'];
@@ -49,6 +51,13 @@ class Exam extends NexusModel
self::FILTER_USER_REGISTER_TIME_RANGE => ['name' => 'User register time range'],
];
protected static function booted()
{
static::saving(function (Model $model) {
$model->duration = (int)$model->duration;
});
}
public function getStatusTextAttribute(): string
{
return self::$status[$this->status]['text'] ?? '';
@@ -59,9 +68,12 @@ class Exam extends NexusModel
return self::$discovers[$this->is_discovered]['text'] ?? '';
}
public function getDurationTextAttribute(): string
public function getDurationTextAttribute($value): string
{
return $this->duration . ' Days';
if ($value > 0) {
return $value . ' Days';
}
return '';
}
}
+4 -3
View File
@@ -59,7 +59,7 @@ class ExamRepository extends BaseRepository
if (isset($index['checked']) && !$index['checked']) {
continue;
}
if (!isset($index['require_value']) || !ctype_digit((string)$index['require_value'])) {
if (isset($index['require_value']) && !ctype_digit((string)$index['require_value'])) {
throw new \InvalidArgumentException(sprintf(
'Invalid require value for index: %s.', $index['index']
));
@@ -171,8 +171,8 @@ class ExamRepository extends BaseRepository
}
$added = $user->added->toDateTimeString();
$registerTimeBegin = isset($filters->register_time_range[0]) ? Carbon::parse($filters->register_time_range[0])->toDateString() : '';
$registerTimeEnd = isset($filters->register_time_range[1]) ? Carbon::parse($filters->register_time_range[1])->toDateString() : '';
$registerTimeBegin = isset($filters->register_time_range[0]) ? Carbon::parse($filters->register_time_range[0])->toDateTimeString() : '';
$registerTimeEnd = isset($filters->register_time_range[1]) ? Carbon::parse($filters->register_time_range[1])->toDateTimeString() : '';
if (empty($registerTimeBegin)) {
do_log("$logPrefix, exam: {$exam->id} no register_time_begin");
return false;
@@ -448,6 +448,7 @@ class ExamRepository extends BaseRepository
}
if ($exams->count() > 1) {
do_log("Valid and discovered exam more than 1.", "warning");
return false;
}
/** @var Exam $exam */
$exam = $exams->first();