Files
test/app/schema/clazz_schema.py
T
2026-09-21 19:03:31 +08:00

77 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""班级模块出入参(需求 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="班级在读人数")