PMFlow/backend/app/api/sstc_api/overview.py

83 lines
2.6 KiB
Python

from __future__ import annotations
from .shared import *
from ...services.sstc.entity_lookup import _ensure_project
from ...services.sstc.governance import _build_governance_snapshot
from ...services.sstc.signal_core import _parse_project_id
router = APIRouter(tags=["sstc"])
@router.get("/projects/{project_id}/sstc/overview")
async def get_board_overview(
project_id: str,
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
pid = _parse_project_id(project_id)
svc = SSTCService(db, tenant_id=int(current_user.tenant_id))
await _ensure_project(svc, pid)
overview = await svc.build_overview(pid)
stages = await svc.build_stages(pid)
risks = await svc.build_risks(pid)
return success_response(
{
"overview": overview,
"stages": stages,
"risks": risks,
}
)
@router.get("/projects/{project_id}/sstc/stages")
async def get_stages(
project_id: str,
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
pid = _parse_project_id(project_id)
svc = SSTCService(db, tenant_id=int(current_user.tenant_id))
await _ensure_project(svc, pid)
return success_response(await svc.build_stages(pid))
@router.get("/projects/{project_id}/sstc/risks")
async def get_risks(
project_id: str,
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
pid = _parse_project_id(project_id)
svc = SSTCService(db, tenant_id=int(current_user.tenant_id))
await _ensure_project(svc, pid)
return success_response(await svc.build_risks(pid))
@router.get("/projects/{project_id}/sstc/governance")
async def get_governance_snapshot(
project_id: str,
charter_id: Optional[int] = Query(default=None),
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
pid = _parse_project_id(project_id)
tenant_id = int(current_user.tenant_id)
svc = SSTCService(db, tenant_id=tenant_id)
await _ensure_project(svc, pid)
data = await _build_governance_snapshot(
db,
tenant_id=tenant_id,
project_id=pid,
charter_id=charter_id,
)
return success_response(data)
@router.get("/projects/{project_id}/sstc-chain")
async def get_sstc_chain(
project_id: str,
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
pid = _parse_project_id(project_id)
svc = SSTCService(db, tenant_id=int(current_user.tenant_id))
await _ensure_project(svc, pid)
return success_response(await svc.build_chain(pid))