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.

POST/api/auth/magic-link

Magic Link per E-Mail senden.

Request Body:

{ "email": "user@example.com" }

Response:

{ "message": "Magic Link gesendet" }
GET/api/auth/verify?token=...

Magic-Link-Token verifizieren und Session erstellen.

Response:

Redirect zu /dashboard
GET/api/auth/session

Aktuelle Session abrufen.

Auth: Session Cookie

Response:

{ "user": { "id": "...", "email": "...", "name": "..." } }
POST/api/auth/logout

Session beenden und Cookie löschen.

Auth: Session Cookie

Locations

Standorte verwalten. Jeder Benutzer kann mehrere Standorte anlegen.

GET/api/locations

Alle Standorte des angemeldeten Benutzers abrufen.

Auth: Session Cookie

Response:

[{ "id": "...", "name": "...", "slug": "..." }]
POST/api/locations

Neuen Standort erstellen.

Auth: Session Cookie

Request Body:

{ "name": "Meine Kantine", "slug": "meine-kantine" }
PUT/api/locations/[id]

Standort aktualisieren (Name, Betriebszeiten, Einstellungen).

Auth: Session Cookie

DELETE/api/locations/[id]

Standort und alle zugehörigen Daten löschen.

Auth: Session Cookie

Kategorien

Menükategorien eines Standorts verwalten (z.B. Vorspeisen, Hauptgerichte).

GET/api/categories?locationId=...

Alle Kategorien eines Standorts abrufen.

Auth: Session Cookie

POST/api/categories

Neue Kategorie erstellen.

Auth: Session Cookie

Request Body:

{ "locationId": "...", "name": "Hauptgerichte" }
PUT/api/categories/[id]

Kategorie umbenennen oder Sortierung ändern.

Auth: Session Cookie

DELETE/api/categories/[id]

Kategorie und zugehörige Artikel löschen.

Auth: Session Cookie

Menu Items

Artikel auf der Speisekarte verwalten.

GET/api/menu-items?locationId=...

Alle Artikel eines Standorts abrufen.

Auth: Session Cookie

POST/api/menu-items

Neuen Artikel erstellen.

Auth: Session Cookie

Request Body:

{ "locationId": "...", "categoryId": "...", "name": "Currywurst", "price": "4.50" }
POST/api/menu-items/bulk

Mehrere Artikel auf einmal importieren (z.B. nach OCR-Scan).

Auth: Session Cookie

Request Body:

{ "items": [{ "name": "...", "price": "..." }] }
PUT/api/menu-items/[id]

Artikel aktualisieren (Name, Preis, Verfügbarkeit, Allergene).

Auth: Session Cookie

DELETE/api/menu-items/[id]

Artikel löschen.

Auth: Session Cookie

Bestellungen

Bestellstatus verwalten.

PATCH/api/orders/[id]/status

Bestellstatus ändern.

Auth: Session Cookie

Request Body:

{ "status": "PREPARING" | "READY" | "COMPLETED" | "CANCELLED" }

Health Check

Server- und Datenbankstatus prüfen.

GET/api/health

Gibt 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.

ModellBeschreibung
UserRegistrierter Betreiber mit E-Mail und Name
SessionLogin-Session mit Token und Ablaufzeit
LocationStandort mit Slug, Betriebszeiten, Admin-/Display-Token
CategoryMenükategorie (z.B. Vorspeisen, Hauptgerichte)
MenuItemArtikel mit Preis, Allergenen, Nährwerten
OrderBestellung mit Status-Workflow (PENDING - READY)
OrderItemEinzelposten einer Bestellung mit Preisschnappschuss

Bestellstatus-Workflow

PENDING-PREPARING-READY-COMPLETED

Bestellungen können jederzeit den Status CANCELLED erhalten.