from datetime import datetime from typing import List, Optional from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from backend.api.deps import AuthUser, require_roles from backend.db.session import get_session from backend.modules.audit.models import AuditAction, AuditResourceType from backend.modules.audit.schemas import AuditLogOut from backend.modules.audit.service import list_audit_logs from backend.modules.users.models import RoleName router = APIRouter(prefix="/api/v1/audit_logs", tags=["audit_logs"]) @router.get("", response_model=List[AuditLogOut]) async def audit_logs( action: Optional[AuditAction] = None, user_id: Optional[int] = None, customer_id: Optional[int] = None, start: Optional[datetime] = None, end: Optional[datetime] = None, session: AsyncSession = Depends(get_session), auth_user: AuthUser = Depends(require_roles([RoleName.ADMIN, RoleName.CUSTOMER_ADMIN])), ) -> List[AuditLogOut]: effective_customer_id = customer_id if auth_user.role_name == RoleName.ADMIN.value else auth_user.customer_id logs = await list_audit_logs(session, effective_customer_id, user_id, action, start, end) return [AuditLogOut.model_validate(log) for log in logs]