PMFlow/backend/app/api/agent_run_audit_api.py

62 lines
2.0 KiB
Python

"""Platform full-chain Agent OS audit API."""
from __future__ import annotations
from typing import Optional
from fastapi import APIRouter, Depends, Query
from fastapi.responses import JSONResponse
from sqlalchemy.ext.asyncio import AsyncSession
from ..core.database import get_db
from ..core.response import error_response, success_response
from ..dependencies.permissions import require_platform_capability
from ..models import User
from ..services.agent_run_audit_service import AgentRunAuditService
router = APIRouter(prefix="/agent-run-audits", tags=["agent_run_audits"])
require_platform_audit_view = require_platform_capability("platform.audit.view")
@router.get("")
async def list_agent_run_audits(
page: int = Query(default=1, ge=1),
page_size: int = Query(default=30, ge=1, le=100),
tenant_id: Optional[int] = Query(default=None),
user_id: Optional[int] = Query(default=None),
status: Optional[str] = Query(default=None, max_length=80),
source_channel: Optional[str] = Query(default=None, max_length=80),
keyword: Optional[str] = Query(default=None, max_length=300),
since_hours: Optional[int] = Query(default=168, ge=1, le=8760),
current_user: User = Depends(require_platform_audit_view),
db: AsyncSession = Depends(get_db),
):
_ = current_user
data = await AgentRunAuditService(db).list_runs(
page=page,
page_size=page_size,
tenant_id=tenant_id,
user_id=user_id,
status=status,
source_channel=source_channel,
keyword=keyword,
since_hours=since_hours,
)
return success_response(data)
@router.get("/{public_run_id}")
async def get_agent_run_audit(
public_run_id: str,
current_user: User = Depends(require_platform_audit_view),
db: AsyncSession = Depends(get_db),
):
_ = current_user
try:
data = await AgentRunAuditService(db).get_run(public_run_id)
except ValueError as exc:
return JSONResponse(status_code=404, content=error_response(404, str(exc)))
return success_response(data)