Files
ai-agent-admin/backend-fastapi/core/ui_config/schema.py
T
2026-06-08 18:14:59 +08:00

110 lines
3.9 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
UI Config Schema - UI配置数据验证模式
"""
from datetime import datetime
from typing import Optional, Any, Dict
from pydantic import BaseModel, ConfigDict, Field, field_validator
from app.base_schema import CSTDatetime
class UIConfigBase(BaseModel):
"""UI配置基础Schema"""
application_id: Optional[str] = Field(default=None, description="所属应用ID(空为主应用配置)")
config_key: str = Field(..., min_length=1, max_length=100, description="配置键")
config_value: Optional[str] = Field(None, description="配置值(JSON)")
config_type: str = Field(default="preferences", max_length=50, description="配置类型")
description: Optional[str] = Field(None, max_length=200, description="配置描述")
status: bool = Field(default=True, description="状态")
sort: int = Field(default=0, description="排序")
@field_validator("config_key")
@classmethod
def validate_config_key(cls, v):
"""验证配置键格式"""
if not v:
raise ValueError("配置键不能为空")
if not v.replace('_', '').replace('-', '').isalnum():
raise ValueError("配置键只能包含字母、数字、下划线和短横线")
return v
class UIConfigCreate(UIConfigBase):
"""UI配置创建Schema"""
pass
class UIConfigUpdate(BaseModel):
"""UI配置更新Schema - 所有字段可选"""
application_id: Optional[str] = Field(default=None, description="所属应用ID")
config_key: Optional[str] = Field(None, min_length=1, max_length=100, description="配置键")
config_value: Optional[str] = Field(None, description="配置值(JSON)")
config_type: Optional[str] = Field(None, max_length=50, description="配置类型")
description: Optional[str] = Field(None, max_length=200, description="配置描述")
status: Optional[bool] = Field(None, description="状态")
sort: Optional[int] = Field(None, description="排序")
@field_validator("config_key")
@classmethod
def validate_config_key(cls, v):
"""验证配置键格式"""
if v is not None:
if not v:
raise ValueError("配置键不能为空")
if not v.replace('_', '').replace('-', '').isalnum():
raise ValueError("配置键只能包含字母、数字、下划线和短横线")
return v
class UIConfigResponse(BaseModel):
"""UI配置响应Schema"""
id: str
application_id: Optional[str] = None
config_key: str
config_value: Optional[str] = None
config_type: str
description: Optional[str] = None
status: bool
sort: int = 0
is_deleted: bool = False
sys_create_datetime: Optional[CSTDatetime] = None
sys_update_datetime: Optional[CSTDatetime] = None
model_config = ConfigDict(from_attributes=True)
class UIConfigSimple(BaseModel):
"""UI配置简单输出(用于选择器)"""
id: str
config_key: str
config_type: str
status: bool
model_config = ConfigDict(from_attributes=True)
class UIConfigValueUpdate(BaseModel):
"""UI配置值更新Schema(仅更新值)"""
config_value: str = Field(..., description="配置值(JSON)")
class PreferencesConfigResponse(BaseModel):
"""前端偏好配置响应Schema"""
app: Optional[Dict[str, Any]] = None
theme: Optional[Dict[str, Any]] = None
logo: Optional[Dict[str, Any]] = None
copyright: Optional[Dict[str, Any]] = None
sidebar: Optional[Dict[str, Any]] = None
header: Optional[Dict[str, Any]] = None
footer: Optional[Dict[str, Any]] = None
tabbar: Optional[Dict[str, Any]] = None
breadcrumb: Optional[Dict[str, Any]] = None
navigation: Optional[Dict[str, Any]] = None
shortcutKeys: Optional[Dict[str, Any]] = None
transition: Optional[Dict[str, Any]] = None
widget: Optional[Dict[str, Any]] = None
loginConfig: Optional[Dict[str, Any]] = None