Files

101 lines
2.6 KiB
Python

from datetime import datetime
from typing import Optional
from pydantic import BaseModel, ConfigDict, field_validator
from app.base_schema import CSTDatetime
class DemoBase(BaseModel):
"""Demo基础Schema"""
title: str
content: Optional[str] = None
status: int = 1
priority: int = 0
is_active: bool = True
@field_validator("status")
@classmethod
def validate_status(cls, v):
"""验证状态"""
if v not in [0, 1, 2]:
raise ValueError("状态必须为 0(草稿)、1(发布) 或 2(归档)")
return v
@field_validator("priority")
@classmethod
def validate_priority(cls, v):
"""验证优先级"""
if v not in [0, 1, 2]:
raise ValueError("优先级必须为 0(低)、1(中) 或 2(高)")
return v
class DemoCreate(DemoBase):
"""创建Demo的Schema"""
pass
class DemoUpdate(BaseModel):
"""更新Demo的Schema - 所有字段可选"""
title: Optional[str] = None
content: Optional[str] = None
status: Optional[int] = None
priority: Optional[int] = None
is_active: Optional[bool] = None
@field_validator("status")
@classmethod
def validate_status(cls, v):
"""验证状态"""
if v is not None and v not in [0, 1, 2]:
raise ValueError("状态必须为 0(草稿)、1(发布) 或 2(归档)")
return v
@field_validator("priority")
@classmethod
def validate_priority(cls, v):
"""验证优先级"""
if v is not None and v not in [0, 1, 2]:
raise ValueError("优先级必须为 0(低)、1(中) 或 2(高)")
return v
class DemoResponse(BaseModel):
"""
Demo响应Schema - 演示字段权限
必填字段(不可隐藏):
- id: 记录ID
- title: 标题
- status: 状态
可选字段(可隐藏):
- content: 内容
- priority: 优先级
- is_active: 是否激活
- sort: 排序
- is_deleted: 是否删除
- sys_create_datetime: 创建时间
- sys_update_datetime: 更新时间
- sys_creator_id: 创建人ID
- sys_dept_id: 部门ID
"""
# 必填字段 - 前端不可隐藏
id: str
status: int
# 可选字段 - 前端可以隐藏
title: Optional[str] = None
content: Optional[str] = None
priority: int = 0
is_active: bool = True
sort: Optional[int] = 0
is_deleted: Optional[bool] = False
sys_create_datetime: Optional[CSTDatetime] = None
sys_update_datetime: Optional[CSTDatetime] = None
sys_creator_id: Optional[str] = None
sys_dept_id: Optional[str] = None
model_config = ConfigDict(from_attributes=True)