# schemas/stu_score_schema.py # 学生成绩模块的 Pydantic 模式 from decimal import Decimal from typing import Optional from pydantic import BaseModel, ConfigDict, Field class StuScoreBase(BaseModel): """成绩公共字段""" stu_id: str = Field(..., max_length=15, description="学生编号") exam_attempt: int = Field(default=1, ge=1, description="考试轮次") exam_score: Decimal = Field(..., ge=0, le=100, description="成绩(0-100)") score_level: Optional[str] = Field(default=None, max_length=10, description="成绩等级") class StuScoreCreate(StuScoreBase): """新增成绩记录""" pass class StuScoreUpdate(BaseModel): """更新成绩记录:仅更新传入的字段""" stu_id: Optional[str] = Field(default=None, max_length=15, description="学生编号") exam_attempt: Optional[int] = Field(default=None, ge=1, description="考试轮次") exam_score: Optional[Decimal] = Field(default=None, ge=0, le=100, description="成绩(0-100)") score_level: Optional[str] = Field(default=None, max_length=10, description="成绩等级") class StuScoreOut(StuScoreBase): """成绩响应模型(含自增 id 与软删除标记)""" id: int is_deleted: bool model_config = ConfigDict(from_attributes=True)