58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
|
|
"""审计日志 Pydantic Schema"""
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
import uuid
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
from pydantic import BaseModel
|
|||
|
|
|
|||
|
|
|
|||
|
|
class AuditLogResponse(BaseModel):
|
|||
|
|
"""单条审计记录"""
|
|||
|
|
id: uuid.UUID
|
|||
|
|
user_id: str | None = None
|
|||
|
|
display_name: str | None = None
|
|||
|
|
role: str | None = None
|
|||
|
|
|
|||
|
|
action: str
|
|||
|
|
action_label: str | None = None # 服务端补的中文标签,避免前端各处硬编码
|
|||
|
|
module: str
|
|||
|
|
module_label: str | None = None
|
|||
|
|
|
|||
|
|
target_type: str | None = None
|
|||
|
|
target_id: str | None = None
|
|||
|
|
target_name: str | None = None
|
|||
|
|
details: dict | None = None
|
|||
|
|
|
|||
|
|
ip_address: str | None = None
|
|||
|
|
user_agent: str | None = None
|
|||
|
|
method: str | None = None
|
|||
|
|
url: str | None = None
|
|||
|
|
status_code: int | None = None
|
|||
|
|
error_message: str | None = None
|
|||
|
|
|
|||
|
|
# 与结构化日志对账用:拿着它就能捞到对应的接口日志
|
|||
|
|
request_id: str | None = None
|
|||
|
|
|
|||
|
|
created_at: datetime
|
|||
|
|
|
|||
|
|
model_config = {"from_attributes": True}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class AuditLogListResponse(BaseModel):
|
|||
|
|
"""审计日志分页列表"""
|
|||
|
|
items: list[AuditLogResponse]
|
|||
|
|
total: int
|
|||
|
|
|
|||
|
|
|
|||
|
|
class AuditOption(BaseModel):
|
|||
|
|
"""筛选项(value/label 结构,直接喂给前端下拉)"""
|
|||
|
|
value: str
|
|||
|
|
label: str
|
|||
|
|
|
|||
|
|
|
|||
|
|
class AuditOptionsResponse(BaseModel):
|
|||
|
|
"""筛选项集合"""
|
|||
|
|
modules: list[AuditOption]
|
|||
|
|
actions: list[AuditOption]
|