From 9b0c286aa3b4ddda3b5bf944e71112392d2b54b7 Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 30 May 2026 12:31:59 +0200 Subject: [PATCH] Expenses: GET /api/expenses/categories liefert die Kategorien MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit KATEGORIE_META als Dict mit id → {label, color} (preserved Order). KATEGORIEN bleibt als Set für Validierung. Neuer Endpunkt liefert [{id, label, color}, …] als Single Source of Truth für PWA und mobile Clients — bisher war die Liste in JS und Python dupliziert. Mobile-Client (banyaro-ios) holt die Liste jetzt dynamisch. --- backend/routes/expenses.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/backend/routes/expenses.py b/backend/routes/expenses.py index 9a34f27..9e32e43 100644 --- a/backend/routes/expenses.py +++ b/backend/routes/expenses.py @@ -12,7 +12,15 @@ from auth import get_current_user router = APIRouter() logger = logging.getLogger(__name__) -KATEGORIEN = {"tierarzt", "futter", "zubehoer", "versicherung", "sitter", "sonstiges"} +KATEGORIE_META = { + "futter": {"label": "Futter", "color": "#f59e0b"}, + "tierarzt": {"label": "Tierarzt", "color": "#ef4444"}, + "zubehoer": {"label": "Zubehör", "color": "#8b5cf6"}, + "versicherung": {"label": "Versicherung", "color": "#3b82f6"}, + "sitter": {"label": "Sitter", "color": "#10b981"}, + "sonstiges": {"label": "Sonstiges", "color": "#6b7280"}, +} +KATEGORIEN = set(KATEGORIE_META.keys()) # ------------------------------------------------------------------ @@ -75,6 +83,18 @@ def _serialize(row) -> dict: return dict(row) +# ------------------------------------------------------------------ +# GET /api/expenses/categories — gültige Kategorien (id + label + color) +# Single source of truth für PWA und mobile Clients. +# ------------------------------------------------------------------ +@router.get("/categories") +async def list_categories(): + return [ + {"id": key, **meta} + for key, meta in KATEGORIE_META.items() + ] + + # ------------------------------------------------------------------ # GET /api/expenses/summary — Monats- und Jahressummen # WICHTIG: Diese Route muss VOR /{id} stehen!