from datetime import datetime from typing import Any, Optional from pydantic import BaseModel, ConfigDict, Field class AuditLogCreate(BaseModel): """创建审计日志的 Schema""" company_id: int = Field(..., description="企业 ID") user_id: Optional[int] = Field(None, description="用户 ID") action: str = Field(..., max_length=50, description="操作类型") resource_type: str = Field(..., max_length=100, description="资源类型") resource_id: Optional[str] = Field(None, max_length=200, description="资源 ID") details: Optional[dict[str, Any]] = Field(None, description="操作详情") ip_address: Optional[str] = Field(None, max_length=50, description="IP 地址") user_agent: Optional[str] = Field(None, description="User-Agent") class AuditLogResponse(BaseModel): """审计日志响应 Schema""" model_config = ConfigDict(from_attributes=True) id: int company_id: int user_id: Optional[int] action: str resource_type: str resource_id: Optional[str] details: Optional[dict[str, Any]] ip_address: Optional[str] user_agent: Optional[str] created_at: datetime class AuditLogQuery(BaseModel): """审计日志查询参数""" company_id: Optional[int] = None user_id: Optional[int] = None action: Optional[str] = None resource_type: Optional[str] = None resource_id: Optional[str] = None start_date: Optional[datetime] = None end_date: Optional[datetime] = None skip: int = Field(default=0, ge=0) limit: int = Field(default=50, ge=1, le=1000)