import sys from typing import Any from fastapi import APIRouter, Depends from app.auth import verify_token sys.path.insert(0, "/opt/infrastructure") from toolkit.discovery import all_projects # noqa: E402 router = APIRouter() def _serialize_project(desc: Any) -> dict: """Serialize a ProjectDescriptor to a response dict.""" environments = [ { "name": e.name, "domain": e.domain, "compose_dir": e.compose_dir, } for e in desc.environments ] return { "environments": environments, "domains": desc.domains, "promote": desc.promote or None, "has_cli": bool(desc.sync.get("type")), "backup": desc.backup or None, "type": desc.type, } @router.get("/", summary="Get project registry") async def get_registry( _: str = Depends(verify_token), ) -> dict[str, Any]: """Return project list with environments, promote config, and domains.""" projects = { name: _serialize_project(desc) for name, desc in all_projects().items() } return {"projects": projects}