Alle Dokumente

FleetFlow — API-Referenz

Alle schreibenden Aktionen der Anwendung laufen über Next.js-API-Routen unter /api. Jede Route verwendet den serverseitigen, Cookie-authentifizierten Supabase-Client; vor jeder schreibenden Aktion wird die Berechtigung der Rolle geprüft (Berechtigungsmatrix, siehe Projektdokumentation, Abschnitt 3.5). Zusätzlich greifen die Row-Level-Security-Policies der Datenbank als zweite Kontrollebene.

Konventionen

  • Alle Routen (außer POST /api/register) erfordern eine angemeldete Session mit bestandener 2FA (durchgesetzt in der Middleware).
  • Fehlende Berechtigung → 403 mit JSON-Fehlermeldung; Validierungsfehler → 400; nicht gefunden → 404.
  • Request-/Response-Body: JSON (Ausnahme: PDF-Endpunkte liefern application/pdf).
  • Listen-Endpunkte mit Pagination liefern { data, count } (Seitengröße 50).

Authentifizierung & Registrierung

Methode & PfadZweck
POST /api/registerEinmalige Firmen-Registrierung (Einzelmandant): legt companies-Zeile und Admin-Konto in einem Schritt an. Gesperrt (409), sobald eine Firma existiert. Login/2FA selbst laufen direkt über Supabase Auth (kein eigener Endpunkt).

Fahrzeuge

Methode & PfadZweck
GET /api/vehiclesFahrzeugliste (Filter: Status, Typ, Freitextsuche; paginiert)
POST /api/vehiclesFahrzeug anlegen
GET /api/vehicles/[id]Fahrzeugdetail
PATCH /api/vehicles/[id]Fahrzeug ändern (auch: letzte_aufbereitung zurücksetzen)
DELETE /api/vehicles/[id]Fahrzeug löschen (Löschrecht erforderlich)
POST /api/vehicles/[id]/damage-reportsEigenständige Schadensmeldung (Fotos + Beschreibung, KI-Analyse)
POST /api/vehicles/[id]/insurance-policiesVersicherungspolice anlegen (inkl. PDF-Storage-Pfad)
POST /api/vehicles/[id]/versicherungsfaelleVersicherungs-Schadensfall anlegen

Kunden

Methode & PfadZweck
GET /api/customersKundenliste (Freitextsuche; paginiert)
POST /api/customersKunde anlegen (privat/firma)
GET /api/customers/[id]Kundendetail
PATCH /api/customers/[id]Kunde ändern
DELETE /api/customers/[id]Kunde löschen (Löschrecht erforderlich)

Buchungen

Methode & PfadZweck
GET /api/bookingsBuchungsliste (?status=&page=, liefert { data, count })
POST /api/bookingsBuchung anlegen (inkl. Verfügbarkeits- und Preisprüfung)
GET /api/bookings/[id]Buchungsdetail
PATCH /api/bookings/[id]Buchung ändern / Statusübergang (nur gültige Übergänge; setzt ggf. Fahrzeugstatus)
DELETE /api/bookings/[id]Buchung löschen (Löschrecht erforderlich)
GET /api/bookings/availabilityVerfügbarkeitsprüfung Fahrzeug × Zeitraum
GET /api/bookings/[id]/documents/[kind]/pdfAngebot bzw. Auftragsbestätigung als PDF (kind: angebot | auftragsbestaetigung; wird bei jedem Abruf frisch gerendert)
POST /api/bookings/[id]/documents/[kind]/sendDokument per E-Mail versenden (Resend bzw. Simulation, Antwort enthält email_simuliert)

Übergaben

Methode & PfadZweck
POST /api/handoversAusgabe-/Rückgabeprotokoll anlegen (km, Tank, Zustand, Gegenstände, Fotos)

Rechnungen

Methode & PfadZweck
GET /api/invoicesRechnungsliste
POST /api/invoicesRechnung aus abgeschlossener Buchung erzeugen (fortlaufende Nummer, Netto/MwSt./Brutto)
GET /api/invoices/[id]Rechnungsdetail
PATCH /api/invoices/[id]Statusübergang (Entwurf → Versendet → Bezahlt / Storniert)
GET /api/invoices/[id]/pdfRechnungs-PDF (im Storage gecacht)
POST /api/invoices/[id]/sendRechnung per E-Mail versenden

Versicherungen

Methode & PfadZweck
DELETE /api/insurance-policies/[id]Police löschen (Löschrecht insurance erforderlich)
PATCH /api/versicherungsfaelle/[id]Schadensfall ändern / Statusübergang (offen → in Bearbeitung → abgeschlossen)
DELETE /api/versicherungsfaelle/[id]Schadensfall löschen

Werkstatt

Methode & PfadZweck
GET /api/werkstattauftraegeAuftragsliste (Werkstatt sieht nur eigene Aufträge)
POST /api/werkstattauftraegeFahrzeug an Werkstatt übergeben (Trigger setzt Fahrzeugstatus → „in Wartung")
PATCH /api/werkstattauftraege/[id]Auftrag annehmen / Notiz / abschließen (Abschluss setzt Fahrzeugstatus → „verfügbar")

KI

Methode & PfadZweck
POST /api/ai/extractBuchungsdaten aus E-Mail-Text extrahieren (Gemini, Fallback: Regex-Heuristik)
POST /api/ai/damageSchadensanalyse eines hochgeladenen Fotos (Gemini Vision, Fallback: Mock; löst Storage-URL aus storage_path auf)

Preisberechnung

Methode & PfadZweck
POST /api/pricing/quotePreisaufschlüsselung für Fahrzeug × Zeitraum (alle Faktoren einzeln + Gesamtpreis)

Einstellungen & Firma

Methode & PfadZweck
GET /api/settingsGlobale Einstellungen lesen (Aufbereitungsintervall, Preisfaktoren)
PATCH /api/settingsEinstellungen ändern (Schreibrecht settings erforderlich, Validierung)
GET /api/companyFirmendaten lesen
PATCH /api/companyFirmendaten ändern (Schreibrecht companies erforderlich)

Benutzer, Rollen & Berechtigungen

Methode & PfadZweck
GET /api/teamAlle Benutzerkonten mit Rolle
POST /api/teamMitarbeiterkonto anlegen (Admin-API, E-Mail + Initialpasswort)
PATCH /api/team/[id]Rolle eines Kontos ändern
GET /api/rolesRollen inkl. Berechtigungsmatrix
POST /api/rolesNeue Rolle anlegen
PATCH /api/roles/[id]Rolle umbenennen (Systemrollen geschützt)
DELETE /api/roles/[id]Rolle löschen (Systemrollen geschützt)
PUT /api/roles/[id]/permissionsBerechtigungsmatrix der Rolle setzen (11 Ressourcen × Sehen/Bearbeiten/Löschen)