"""数据脱敏规则 Pydantic Schemas — 用于 MaskingRule CRUD 操作。""" from datetime import datetime from typing import Optional, Dict, Any, List from pydantic import BaseModel, ConfigDict, Field class MaskingRuleBase(BaseModel): """脱敏规则基础 Schema。""" database: str = Field(..., min_length=1, max_length=100, description="数据库名称") table_name: str = Field(..., min_length=1, max_length=100, description="表名,* 表示所有表") column_name: str = Field(..., min_length=1, max_length=100, description="列名,* 表示所有列") mask_type: str = Field(..., pattern=r"^(full|partial|hash|truncate|regex)$") mask_config: Optional[Dict[str, Any]] = Field(default=None, description="脱敏配置(JSON)") is_enabled: bool = Field(default=True, description="是否启用") class MaskingRuleCreate(MaskingRuleBase): """创建脱敏规则请求 Schema。""" pass class MaskingRuleUpdate(BaseModel): """更新脱敏规则请求 Schema。""" database: Optional[str] = Field(default=None, max_length=100) table_name: Optional[str] = Field(default=None, max_length=100) column_name: Optional[str] = Field(default=None, max_length=100) mask_type: Optional[str] = Field(default=None, pattern=r"^(full|partial|hash|truncate|regex)$") mask_config: Optional[Dict[str, Any]] = Field(default=None, description="脱敏配置(JSON)") is_enabled: Optional[bool] = Field(default=None, description="是否启用") class MaskingRuleResponse(MaskingRuleBase): """脱敏规则响应 Schema。""" id: int instance_id: int created_at: Optional[datetime] = None updated_at: Optional[datetime] = None model_config = ConfigDict(from_attributes=True) class MaskingRuleBatchCreate(BaseModel): """批量创建脱敏规则请求 Schema。""" rules: List[MaskingRuleCreate] = Field(..., min_length=1, max_length=100) class MaskingRuleListResponse(BaseModel): """脱敏规则列表响应 Schema。""" total: int items: List[MaskingRuleResponse] class MaskingRuleQueryParams(BaseModel): """脱敏规则查询参数 Schema。""" database: Optional[str] = None table_name: Optional[str] = None keyword: Optional[str] = None page: int = Field(default=1, ge=1) page_size: int = Field(default=20, ge=1, le=100)