from datetime import datetime from pydantic import BaseModel, ConfigDict, Field from typing import Optional, Literal class AuditRuleCreate(BaseModel): name: str = Field(..., min_length=1, max_length=100) description: Optional[str] = None rule_type: Literal["syntax", "performance", "safety", "security", "naming", "DDL", "DML", "DQL", "DCL"] severity: Literal["error", "warning", "info"] = "warning" db_type: str = "mysql" pattern: Optional[str] = None value: Optional[str] = Field(default=None, max_length=255) is_enabled: bool = True message: str = Field(..., min_length=1, max_length=500) class AuditRuleUpdate(BaseModel): name: Optional[str] = Field(default=None, min_length=1, max_length=100) description: Optional[str] = None rule_type: Optional[Literal["syntax", "performance", "safety", "security", "naming", "DDL", "DML", "DQL", "DCL"]] = None severity: Optional[Literal["error", "warning", "info"]] = None db_type: Optional[str] = None pattern: Optional[str] = None value: Optional[str] = Field(default=None, max_length=255) is_enabled: Optional[bool] = None message: Optional[str] = Field(default=None, min_length=1, max_length=500) class AuditRuleResponse(BaseModel): id: int name: str description: Optional[str] = None rule_type: str severity: str db_type: str pattern: Optional[str] = None value: Optional[str] = None is_enabled: bool message: str created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True)