from pydantic import BaseModel, Field, field_validator from app.api.v1.module_energy.variable.schema import VariableItemSchema class TemplateChapterRuleSchema(BaseModel): """模板章节规则配置项。""" id: int | None = Field(default=None, ge=1, description="章节规则标注ID,存在则更新,不传则新增") chapter_name: str = Field(..., min_length=1, max_length=128, description="章节名称") chapter_order: int = Field(default=999, ge=0, description="章节排序") rule_id: int = Field(..., ge=1, description="关联规则ID") description: str | None = Field(default=None, max_length=500, description="描述") @field_validator("chapter_name") @classmethod def validate_chapter_name(cls, value: str) -> str: value = value.strip() if not value: raise ValueError("章节名称不能为空") return value class TemplateConfigSaveSchema(BaseModel): """模板章节规则和变量关联统一保存模型。""" template_id: int = Field(..., ge=1, description="模板ID") chapters: list[TemplateChapterRuleSchema] = Field(default_factory=list, description="章节规则标注列表") variables: list[VariableItemSchema] = Field(default_factory=list, description="变量关联列表") class TemplateSingleChapterConfigSaveSchema(TemplateConfigSaveSchema): """单个章节标注和变量关联保存模型。""" @field_validator("chapters") @classmethod def validate_single_chapter(cls, value: list[TemplateChapterRuleSchema]) -> list[TemplateChapterRuleSchema]: if len(value) != 1: raise ValueError("chapters 只能传入一条章节规则标注") return value