"""Administrative product-governance monitoring and compliance review APIs.""" from typing import Any from fastapi import APIRouter, Depends, Query from app.api.dependencies.auth import build_request_context from app.api.schemas.product_governance import ProductGovernanceReview from app.core.contracts import RequestContext from app.service.product_governance_monitor_service import ProductGovernanceMonitorService router = APIRouter(prefix="/api/v1/admin/product-governance", tags=["product-governance"]) @router.post("/sync-runs") async def run_official_source_monitor( context: RequestContext = Depends(build_request_context), # noqa: B008 ) -> dict[str, object]: result = await ProductGovernanceMonitorService().run_manually(context) return { "data": { "run_no": result.run_no, "product_count": result.product_count, "change_count": result.change_count, "error_count": result.error_count, }, "meta": {"trace_id": context.trace_id}, } @router.get("/sync-runs") async def list_sync_runs( limit: int = Query(default=30, ge=1, le=100), context: RequestContext = Depends(build_request_context), # noqa: B008 ) -> dict[str, Any]: return { "data": await ProductGovernanceMonitorService().runs(context, limit=limit), "meta": {"trace_id": context.trace_id}, } @router.get("/review-queue") async def review_queue( limit: int = Query(default=100, ge=1, le=100), context: RequestContext = Depends(build_request_context), # noqa: B008 ) -> dict[str, Any]: return { "data": await ProductGovernanceMonitorService().pending(context, limit=limit), "meta": {"trace_id": context.trace_id}, } @router.post("/candidates/{candidate_id}/reviews") async def review_candidate( candidate_id: int, payload: ProductGovernanceReview, context: RequestContext = Depends(build_request_context), # noqa: B008 ) -> dict[str, object]: return { "data": await ProductGovernanceMonitorService().review( candidate_id, payload.decision, payload.comment, context ), "meta": {"trace_id": context.trace_id}, }