30 lines
1.2 KiB
Python
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]
|