成绩复盘与 PC 端上传优化:各科考试状态多选及树状统计。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -11,6 +11,16 @@ class ExamTypeEnum(str, Enum):
|
||||
final = "final"
|
||||
|
||||
|
||||
class ReviewStatusEnum(str, Enum):
|
||||
careless = "careless"
|
||||
unknown = "unknown"
|
||||
nervous = "nervous"
|
||||
normal = "normal"
|
||||
|
||||
|
||||
REVIEW_STATUS_VALUES = {s.value for s in ReviewStatusEnum}
|
||||
|
||||
|
||||
class WrongQuestionStatusEnum(str, Enum):
|
||||
pending = "pending"
|
||||
ocr_done = "ocr_done"
|
||||
@@ -151,6 +161,7 @@ class ScoreInput(BaseModel):
|
||||
subject_id: int
|
||||
total_score: float
|
||||
obtained_score: float
|
||||
review_statuses: list[ReviewStatusEnum] = []
|
||||
|
||||
@field_validator("total_score")
|
||||
@classmethod
|
||||
@@ -169,6 +180,18 @@ class ScoreInput(BaseModel):
|
||||
raise ValueError("得分不能为负")
|
||||
return v
|
||||
|
||||
@field_validator("review_statuses")
|
||||
@classmethod
|
||||
def validate_review_statuses(cls, v: list[ReviewStatusEnum]) -> list[ReviewStatusEnum]:
|
||||
seen: set[str] = set()
|
||||
unique: list[ReviewStatusEnum] = []
|
||||
for item in v:
|
||||
key = item.value if isinstance(item, ReviewStatusEnum) else str(item)
|
||||
if key not in seen:
|
||||
seen.add(key)
|
||||
unique.append(item if isinstance(item, ReviewStatusEnum) else ReviewStatusEnum(key))
|
||||
return unique
|
||||
|
||||
|
||||
class ScoreOut(BaseModel):
|
||||
id: UUID
|
||||
@@ -177,6 +200,7 @@ class ScoreOut(BaseModel):
|
||||
total_score: float
|
||||
obtained_score: float
|
||||
ratio: float
|
||||
review_statuses: list[ReviewStatusEnum] = []
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user