From fd03c16eca085423267c163137b28ccb60de8db0 Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Wed, 25 Feb 2026 00:45:13 +0100
Subject: [PATCH] feat: multi-compose rebuild (Seafile), cancel endpoint, schedule router, project descriptor

---
 app/routers/registry.py |   48 ++++++++++++++++++++++++++----------------------
 1 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/app/routers/registry.py b/app/routers/registry.py
index 99e8f20..8643808 100644
--- a/app/routers/registry.py
+++ b/app/routers/registry.py
@@ -1,20 +1,35 @@
-import yaml
-from pathlib import Path
+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()
 
-_REGISTRY_PATH = Path("/opt/infrastructure/servers/hetzner-vps/registry.yaml")
 
+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
+    ]
 
-def _load_registry() -> dict:
-    """Load and return the registry YAML."""
-    with open(_REGISTRY_PATH) as f:
-        return yaml.safe_load(f)
+    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")
@@ -22,19 +37,8 @@
     _: str = Depends(verify_token),
 ) -> dict[str, Any]:
     """Return project list with environments, promote config, and domains."""
-    registry = _load_registry()
-    projects = {}
-
-    for name, cfg in registry.get("projects", {}).items():
-        projects[name] = {
-            "environments": cfg.get("environments", []),
-            "domains": cfg.get("domains", {}),
-            "promote": cfg.get("promote"),
-            "has_cli": bool(cfg.get("cli")),
-            "static": cfg.get("static", False),
-            "infrastructure": cfg.get("infrastructure", False),
-            "backup_dir": cfg.get("backup_dir"),
-            "has_coolify": bool(cfg.get("coolify_uuids")),
-        }
-
+    projects = {
+        name: _serialize_project(desc)
+        for name, desc in all_projects().items()
+    }
     return {"projects": projects}

--
Gitblit v1.3.1