init
This commit is contained in:
87
backend/routes.py
Normal file
87
backend/routes.py
Normal file
@@ -0,0 +1,87 @@
|
||||
"""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}
|
||||
Reference in New Issue
Block a user