""" 管理后台相关 Pydantic Schemas """ from pydantic import BaseModel, Field from datetime import datetime from typing import Optional, List # ============ 系统配置 ============ class SystemConfigItem(BaseModel): """单个配置项""" config_key: str config_value: Optional[str] = None description: Optional[str] = None config_group: str = "general" is_secret: str = "N" updated_at: Optional[datetime] = None class Config: from_attributes = True class SystemConfigUpdate(BaseModel): """批量更新配置""" configs: dict = Field(..., description="键值对: {config_key: config_value}") class SystemConfigResponse(BaseModel): """配置列表响应""" items: List[SystemConfigItem] # ============ 用户管理 ============ class AdminUserResponse(BaseModel): """管理端用户信息""" id: int username: str nickname: Optional[str] = None phone: Optional[str] = None is_admin: bool = False created_at: datetime design_count: int = 0 class Config: from_attributes = True class AdminUserListResponse(BaseModel): """用户列表响应""" items: List[AdminUserResponse] total: int page: int page_size: int class AdminSetAdmin(BaseModel): """设置管理员""" is_admin: bool # ============ 品类管理 ============ class CategoryCreate(BaseModel): """创建品类""" name: str = Field(..., max_length=50) icon: Optional[str] = Field(None, max_length=255) sort_order: int = 0 flow_type: str = Field("full", max_length=20) class CategoryUpdate(BaseModel): """更新品类""" name: Optional[str] = Field(None, max_length=50) icon: Optional[str] = Field(None, max_length=255) sort_order: Optional[int] = None flow_type: Optional[str] = Field(None, max_length=20) class SubTypeCreate(BaseModel): """创建子类型""" category_id: int name: str = Field(..., max_length=50) description: Optional[str] = Field(None, max_length=255) preview_image: Optional[str] = Field(None, max_length=255) sort_order: int = 0 class SubTypeUpdate(BaseModel): """更新子类型""" name: Optional[str] = Field(None, max_length=50) description: Optional[str] = Field(None, max_length=255) preview_image: Optional[str] = Field(None, max_length=255) sort_order: Optional[int] = None class ColorCreate(BaseModel): """创建颜色""" category_id: int name: str = Field(..., max_length=50) hex_code: Optional[str] = Field(None, max_length=10) sort_order: int = 0 class ColorUpdate(BaseModel): """更新颜色""" name: Optional[str] = Field(None, max_length=50) hex_code: Optional[str] = Field(None, max_length=10) sort_order: Optional[int] = None # ============ 设计管理 ============ class AdminDesignListResponse(BaseModel): """管理端设计列表""" items: list total: int page: int page_size: int # ============ 提示词管理 ============ class PromptTemplateItem(BaseModel): """提示词模板""" id: Optional[int] = None template_key: str template_value: str description: Optional[str] = None updated_at: Optional[datetime] = None class Config: from_attributes = True class PromptTemplateUpdate(BaseModel): """更新提示词模板""" template_value: str description: Optional[str] = None class PromptMappingItem(BaseModel): """提示词映射""" id: Optional[int] = None mapping_type: str cn_key: str en_value: str sort_order: int = 0 updated_at: Optional[datetime] = None class Config: from_attributes = True class PromptMappingCreate(BaseModel): """创建提示词映射""" mapping_type: str cn_key: str en_value: str sort_order: int = 0 class PromptMappingUpdate(BaseModel): """更新提示词映射""" cn_key: Optional[str] = None en_value: Optional[str] = None sort_order: Optional[int] = None # ============ 仪表盘 ============ class DashboardStats(BaseModel): """仪表盘统计""" total_users: int total_designs: int total_categories: int today_designs: int today_users: int