代码提交
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
"""班级模块出入参(需求 2.4)。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
|
||||
from pydantic import BaseModel, Field, field_validator
|
||||
|
||||
from app.schema.common import ORMBase, STRIP_VALIDATOR
|
||||
|
||||
|
||||
class _ClazzBase(BaseModel):
|
||||
name: str = Field(..., min_length=1, max_length=50, description="班级名称")
|
||||
direction: str | None = Field(None, max_length=50, description="班级方向")
|
||||
open_date: str | None = Field(None, description="开课时间 YYYY-MM-DD")
|
||||
close_date: str | None = Field(None, description="结课时间 YYYY-MM-DD")
|
||||
classroom: str | None = Field(None, max_length=30, description="教室")
|
||||
capacity: int | None = Field(40, ge=1, le=500, description="计划招生人数")
|
||||
status: int = Field(1, ge=1, le=3, description="状态 1=在读 2=已结课 3=已解散")
|
||||
head_teacher_id: int | None = Field(None, description="班主任(老师ID)")
|
||||
advisor_id: int | None = Field(None, description="带班顾问ID")
|
||||
teacher_ids: list[int] = Field(default_factory=list, description="授课老师ID列表(多对多)")
|
||||
description: str | None = Field(None, description="班级说明")
|
||||
|
||||
_v_strip = STRIP_VALIDATOR
|
||||
|
||||
@field_validator("open_date", "close_date", mode="before")
|
||||
@classmethod
|
||||
def _date_like(cls, v): # noqa: ANN001, ANN201
|
||||
if v is None or isinstance(v, str):
|
||||
return v
|
||||
if isinstance(v, date):
|
||||
return v.isoformat()
|
||||
return v
|
||||
|
||||
|
||||
class ClazzCreate(_ClazzBase):
|
||||
class_no: str | None = Field(None, max_length=30, description="班级编号,不传按 方向缩写+年份+序号 生成")
|
||||
|
||||
|
||||
class ClazzUpdate(BaseModel):
|
||||
name: str | None = Field(None, min_length=1, max_length=50, description="班级名称")
|
||||
direction: str | None = None
|
||||
open_date: str | None = None
|
||||
close_date: str | None = None
|
||||
classroom: str | None = None
|
||||
capacity: int | None = Field(None, ge=1, le=500)
|
||||
status: int | None = Field(None, ge=1, le=3, description="状态 1=在读 2=已结课 3=已解散")
|
||||
head_teacher_id: int | None = None
|
||||
advisor_id: int | None = None
|
||||
teacher_ids: list[int] | None = Field(None, description="传了就整体替换授课老师")
|
||||
description: str | None = None
|
||||
|
||||
_v_strip = STRIP_VALIDATOR
|
||||
|
||||
|
||||
class ClazzOut(ORMBase):
|
||||
id: int
|
||||
class_no: str = Field(..., description="班级编号")
|
||||
name: str
|
||||
direction: str | None = None
|
||||
open_date: date | None = None
|
||||
close_date: date | None = None
|
||||
classroom: str | None = None
|
||||
capacity: int | None = None
|
||||
status: int
|
||||
status_text: str
|
||||
|
||||
head_teacher_id: int | None = None
|
||||
head_teacher_name: str | None = None
|
||||
advisor_id: int | None = None
|
||||
advisor_name: str | None = None
|
||||
teacher_ids: list[int] = Field(default_factory=list, description="授课老师ID")
|
||||
teacher_names: list[str] = Field(default_factory=list, description="授课老师姓名")
|
||||
description: str | None = None
|
||||
student_count: int = Field(0, description="班级在读人数")
|
||||
Reference in New Issue
Block a user