2025-12-10 12:02:17 +08:00

30 lines
1.2 KiB
Python

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]