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()