34 lines
953 B
Python
34 lines
953 B
Python
|
|
from typing import Any, Optional
|
||
|
|
|
||
|
|
from fastapi import Request
|
||
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
|
|
||
|
|
from ..models import AuditAction, AuditLog, AuditResourceType
|
||
|
|
|
||
|
|
|
||
|
|
async def create_audit_log(
|
||
|
|
session: AsyncSession,
|
||
|
|
*,
|
||
|
|
user_id: Optional[int],
|
||
|
|
customer_id: Optional[int],
|
||
|
|
action: AuditAction,
|
||
|
|
resource_type: AuditResourceType,
|
||
|
|
resource_id: Optional[int],
|
||
|
|
description: Optional[str] = None,
|
||
|
|
payload: Optional[Any] = None,
|
||
|
|
request: Optional[Request] = None,
|
||
|
|
) -> None:
|
||
|
|
log = AuditLog(
|
||
|
|
user_id=user_id,
|
||
|
|
customer_id=customer_id,
|
||
|
|
action=action,
|
||
|
|
resource_type=resource_type,
|
||
|
|
resource_id=resource_id,
|
||
|
|
description=description,
|
||
|
|
payload=payload,
|
||
|
|
ip_address=request.client.host if request and request.client else None,
|
||
|
|
user_agent=request.headers.get("User-Agent") if request else None,
|
||
|
|
)
|
||
|
|
session.add(log)
|
||
|
|
await session.flush()
|