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))