83 lines
2.6 KiB
Python
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))
|
|
|