You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
|
|
|
|
class VariableItemSchema(BaseModel):
|
|
"""单个变量-章节关联项。"""
|
|
|
|
variable_name: str = Field(..., min_length=1, max_length=128, description="变量名称")
|
|
chapter_names: list[str] = Field(default_factory=list, description="关联章节名称列表")
|
|
checked: bool | None = Field(default=None, description="当前标注是否勾选该变量,单标注保存接口使用")
|
|
|
|
@field_validator("variable_name")
|
|
@classmethod
|
|
def validate_required(cls, value: str) -> str:
|
|
value = value.strip()
|
|
if not value:
|
|
raise ValueError("必填字段不能为空")
|
|
return value
|
|
|
|
@field_validator("chapter_names")
|
|
@classmethod
|
|
def validate_chapter_names(cls, values: list[str]) -> list[str]:
|
|
result: list[str] = []
|
|
for value in values:
|
|
chapter_name = value.strip()
|
|
if not chapter_name:
|
|
raise ValueError("章节名称不能为空")
|
|
result.append(chapter_name)
|
|
return result
|
|
|
|
|
|
class VariableSaveSchema(BaseModel):
|
|
"""批量保存变量-章节关联。"""
|
|
|
|
template_id: int = Field(..., ge=1, description="模板ID")
|
|
variables: list[VariableItemSchema] = Field(default_factory=list, description="变量列表")
|
|
|
|
|
|
class VariableOutSchema(BaseModel):
|
|
"""变量-章节关联响应模型。"""
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: int = Field(description="主键ID")
|
|
template_id: int = Field(description="模板ID")
|
|
variable_name: str = Field(description="变量名称")
|
|
chapter_name: str = Field(description="章节名称")
|
|
|
|
|
|
class VariableGroupOutSchema(BaseModel):
|
|
"""按变量分组的响应模型。"""
|
|
|
|
variable_name: str = Field(description="变量名称")
|
|
chapter_names: list[str] = Field(default_factory=list, description="关联章节名称列表")
|
|
chapters: list[dict] = Field(default_factory=list, description="关联章节详情列表")
|