Referenz
API-Referenz
FairOrder verwendet eine REST-API mit JSON. Authentifizierung erfolgt über httpOnly Session Cookies nach Magic-Link-Login.
Base URL
Gehostete Version: https://app.fair-order.de
Self-Hosted: https://deine-domain.de
Authentifizierung
Magic-Link-basierte Authentifizierung ohne Passwort.
/api/auth/magic-linkMagic Link per E-Mail senden.
Request Body:
{ "email": "user@example.com" }Response:
{ "message": "Magic Link gesendet" }/api/auth/verify?token=...Magic-Link-Token verifizieren und Session erstellen.
Response:
Redirect zu /dashboard/api/auth/sessionAktuelle Session abrufen.
Auth: Session Cookie
Response:
{ "user": { "id": "...", "email": "...", "name": "..." } }/api/auth/logoutSession beenden und Cookie löschen.
Auth: Session Cookie
Locations
Standorte verwalten. Jeder Benutzer kann mehrere Standorte anlegen.
/api/locationsAlle Standorte des angemeldeten Benutzers abrufen.
Auth: Session Cookie
Response:
[{ "id": "...", "name": "...", "slug": "..." }]/api/locationsNeuen Standort erstellen.
Auth: Session Cookie
Request Body:
{ "name": "Meine Kantine", "slug": "meine-kantine" }/api/locations/[id]Standort aktualisieren (Name, Betriebszeiten, Einstellungen).
Auth: Session Cookie
/api/locations/[id]Standort und alle zugehörigen Daten löschen.
Auth: Session Cookie
Kategorien
Menükategorien eines Standorts verwalten (z.B. Vorspeisen, Hauptgerichte).
/api/categories?locationId=...Alle Kategorien eines Standorts abrufen.
Auth: Session Cookie
/api/categoriesNeue Kategorie erstellen.
Auth: Session Cookie
Request Body:
{ "locationId": "...", "name": "Hauptgerichte" }/api/categories/[id]Kategorie umbenennen oder Sortierung ändern.
Auth: Session Cookie
/api/categories/[id]Kategorie und zugehörige Artikel löschen.
Auth: Session Cookie
Menu Items
Artikel auf der Speisekarte verwalten.
/api/menu-items?locationId=...Alle Artikel eines Standorts abrufen.
Auth: Session Cookie
/api/menu-itemsNeuen Artikel erstellen.
Auth: Session Cookie
Request Body:
{ "locationId": "...", "categoryId": "...", "name": "Currywurst", "price": "4.50" }/api/menu-items/bulkMehrere Artikel auf einmal importieren (z.B. nach OCR-Scan).
Auth: Session Cookie
Request Body:
{ "items": [{ "name": "...", "price": "..." }] }/api/menu-items/[id]Artikel aktualisieren (Name, Preis, Verfügbarkeit, Allergene).
Auth: Session Cookie
/api/menu-items/[id]Artikel löschen.
Auth: Session Cookie
Bestellungen
Bestellstatus verwalten.
/api/orders/[id]/statusBestellstatus ändern.
Auth: Session Cookie
Request Body:
{ "status": "PREPARING" | "READY" | "COMPLETED" | "CANCELLED" }Health Check
Server- und Datenbankstatus prüfen.
/api/healthGibt den Status des Servers und der Datenbankverbindung zurück.
Response:
{ "status": "ok", "database": "connected" }Datenmodell
Das vollständige Schema ist in prisma/schema.prisma definiert.
| Modell | Beschreibung |
|---|---|
| User | Registrierter Betreiber mit E-Mail und Name |
| Session | Login-Session mit Token und Ablaufzeit |
| Location | Standort mit Slug, Betriebszeiten, Admin-/Display-Token |
| Category | Menükategorie (z.B. Vorspeisen, Hauptgerichte) |
| MenuItem | Artikel mit Preis, Allergenen, Nährwerten |
| Order | Bestellung mit Status-Workflow (PENDING - READY) |
| OrderItem | Einzelposten einer Bestellung mit Preisschnappschuss |
Bestellstatus-Workflow
Bestellungen können jederzeit den Status CANCELLED erhalten.