"""Alle API-Routen. Fachlogik wirft ValueError/FileNotFoundError, hier wird auf 400/404/409 gemappt.""" from fastapi import APIRouter, HTTPException import features import projekte router = APIRouter(prefix="/api") @router.get("/health") async def health(): return {"ok": True} @router.get("/projekte") async def projekte_liste(): return projekte.liste() @router.post("/projekte") async def projekt_anlegen(body: dict): name = (body.get("name") or "").strip() try: projekte.anlegen(name) except ValueError as e: raise HTTPException(409 if "existiert" in str(e) else 400, str(e)) return {"name": name} @router.put("/projekte/{name}") async def projekt_umbenennen(name: str, body: dict): neu = (body.get("name") or "").strip() try: projekte.umbenennen(name, neu) except FileNotFoundError as e: raise HTTPException(404, str(e)) except ValueError as e: raise HTTPException(409 if "existiert" in str(e) else 400, str(e)) return {"name": neu} @router.delete("/projekte/{name}") async def projekt_loeschen(name: str): try: projekte.loeschen(name) except FileNotFoundError as e: raise HTTPException(404, str(e)) except ValueError as e: raise HTTPException(400, str(e)) return {"ok": True} @router.get("/projekte/{name}/features") async def features_liste(name: str): try: return features.liste(name) except (FileNotFoundError, ValueError) as e: raise HTTPException(404, str(e)) @router.post("/projekte/{name}/features") async def feature_anlegen(name: str, body: dict): try: return features.anlegen(name, body.get("roh") or "") except FileNotFoundError as e: raise HTTPException(404, str(e)) except ValueError as e: raise HTTPException(400, str(e)) @router.put("/projekte/{name}/features/{id}") async def feature_speichern(name: str, id: str, body: dict): try: return features.speichern(name, id, body.get("roh") or "") except (FileNotFoundError, ValueError) as e: raise HTTPException(404, str(e)) @router.delete("/projekte/{name}/features/{id}") async def feature_loeschen(name: str, id: str): try: features.loeschen(name, id) except (FileNotFoundError, ValueError) as e: raise HTTPException(404, str(e)) return {"ok": True}