Prompt 21 – API-Konzept
Bezug: 19_technische_architektur, 20_datenbank_schema, 05_rollen_rechte. Basis: FastAPI, REST, API-first (Web-PWA + spätere native App als Clients).
1. Grundprinzipien
- REST, JSON, versioniert unter
/api/v1/....
- Auth: Login liefert Token (JWT), jede weitere Anfrage mit Header
Authorization: Bearer gefolgt vom Token-String.
- Jede Route deklariert benötigte Rolle(n) (Prompt 05) über FastAPI-Dependency, zentral geprüft.
- Fehlerformat einheitlich:
{ "error": { "code": "...", "message": "..." } }, HTTP-Status passend (400/401/403/404/409/422).
- Historieneinträge (Prompt 13) werden serverseitig automatisch bei jeder relevanten Statusänderung erzeugt, nicht über eigene API-Aufrufe des Clients.
2. Auth
| Methode |
Pfad |
Rolle |
Zweck |
| POST |
/api/v1/auth/login |
- |
Login (Login-Name+Passwort/PIN), liefert Token |
| POST |
/api/v1/auth/logout |
alle |
Token invalidieren |
| GET |
/api/v1/auth/me |
alle |
eigene Benutzerdaten+Rollen |
3. Stammdaten (Ressourcen)
| Methode |
Pfad |
Rolle |
Zweck |
| GET/POST |
/api/v1/bereiche |
Administration (POST), alle (GET) |
Bereiche |
| GET/POST |
/api/v1/kategorien |
Administration (POST), alle (GET) |
Kategorien |
| GET/POST |
/api/v1/standorte |
Administration (POST), alle (GET) |
Standorte |
| GET/POST |
/api/v1/objekttypen |
Administration (POST), alle (GET) |
Objekttypen |
| GET/POST/PATCH |
/api/v1/materialien |
Administration |
Materialstamm (Prompt 07) |
| GET |
/api/v1/materialien/{id} |
alle |
Detail |
4. Beladungsvorlagen
| Methode |
Pfad |
Rolle |
Zweck |
| GET |
/api/v1/vorlagen |
alle |
Liste, filterbar nach Objekttyp/Status |
| POST |
/api/v1/vorlagen |
Administration, Materialverantwortlicher |
neue Vorlage/Version anlegen (Prompt 08) |
| GET |
/api/v1/vorlagen/{id} |
alle |
Detail inkl. Positionen |
| POST |
/api/v1/vorlagen/{id}/positionen |
Administration, Materialverantwortlicher |
Position hinzufügen |
| PATCH |
/api/v1/vorlagen/{id}/positionen/{pos_id} |
Administration, Materialverantwortlicher |
Sollmenge ändern (führt zu neuer Version, Prompt 08) |
| GET |
/api/v1/vorlagen/{id}/diff-vorschlaege |
Materialverantwortlicher, Leitung |
Diff zu bestehenden Objekten (Prompt 08 Punkt 6) |
5. Objekte
| Methode |
Pfad |
Rolle |
Zweck |
| GET |
/api/v1/objekte |
alle |
Liste, Filter Standort/Typ, Suche nach Code |
| GET |
/api/v1/objekte/{id} |
alle |
Detail inkl. Objektpositionen |
| GET |
/api/v1/objekte/code/{code} |
alle |
Lookup per QR/Barcode-Code (Karte 10) — Route muss in FastAPI VOR /objekte/{id} registriert werden, sonst greift die generische ID-Route zuerst |
| POST |
/api/v1/objekte |
Administration |
neu anlegen |
| POST |
/api/v1/objekte/{id}/duplizieren |
Administration |
Duplizieren (Prompt 09), Body: neuer Name/Code/Standort |
| PATCH |
/api/v1/objekte/{id}/positionen/{pos_id} |
Materialverantwortlicher |
Sollmengen-Override/Material hinzufügen/entfernen (Prompt 10) |
6. Kontrolle
| Methode |
Pfad |
Rolle |
Zweck |
| POST |
/api/v1/objekte/{id}/kontrollen |
Mitarbeiter+ |
Kontrolle starten (Prompt 02) |
| GET |
/api/v1/kontrollen/{id} |
Mitarbeiter+ |
Status/Fortschritt |
| PUT |
/api/v1/kontrollen/{id}/positionen/{material_id} |
Mitarbeiter+ |
Ist-Menge erfassen/bestätigen (idempotent, wichtig für Prompt 17 Wiederholung nach Netzausfall) |
| POST |
/api/v1/kontrollen/{id}/abschliessen |
Mitarbeiter+ |
Abschluss (Prompt 16), löst Kontrollnachweis aus |
| POST |
/api/v1/kontrollen/{id}/abbrechen |
Mitarbeiter+ |
Abbruch (Prompt 16), optional Grund im Body |
7. Fehlbestand / Nachfüllung / Mindermenge
| Methode |
Pfad |
Rolle |
Zweck |
| GET |
/api/v1/fehlbestaende |
Materialverantwortlicher, Leitung, Administration |
Liste, Filter Standort/Objekt/Material/Alter/Status (Prompt 12) |
| GET |
/api/v1/fehlbestaende/{id} |
s.o. + Mitarbeiter (eigene) |
Detail inkl. Historie |
| POST |
/api/v1/fehlbestaende/{id}/nachfuellungen |
Mitarbeiter+ |
Nachfüllung erfassen (Prompt 02), aktualisiert Fehlmenge/Status automatisch |
| POST |
/api/v1/fehlbestaende/{id}/mindermenge |
Materialverantwortlicher, Leitung |
Mindermenge genehmigen, Body: Begründung (Prompt 04) |
| DELETE |
/api/v1/fehlbestaende/{id}/mindermenge |
- |
NICHT vorgesehen – Genehmigung läuft nur automatisch ab (Prompt 04), kein manuelles Löschen |
7a. Verwaltung (Administration) – ergänzt nach Gesamtprüfung
Fehlte bisher, obwohl in der Berechtigungsmatrix (Prompt 05) gefordert.
| Methode |
Pfad |
Rolle |
Zweck |
| GET/POST |
/api/v1/benutzer |
Administration |
Benutzer verwalten |
| PATCH |
/api/v1/benutzer/{id} |
Administration |
Rollen zuweisen, aktiv/inaktiv setzen |
| GET/POST |
/api/v1/zustaendigkeiten |
Administration |
Zuständigkeits-Zuordnung (Karte 04) |
| DELETE |
/api/v1/zustaendigkeiten/{id} |
Administration |
Zuordnung entfernen |
| GET/POST |
/api/v1/kontrollverantwortung |
Administration, Materialverantwortlicher (eigener Bereich) |
Kontrollverantwortung zuweisen (Karte 01) |
| GET/POST |
/api/v1/systemknoten |
Administration |
Satelliten-Server anlegen/verwalten (Karte 13) |
| POST |
/api/v1/objekte/{id}/auslagern |
Administration |
Objekt einem Satelliten zuordnen |
| POST |
/api/v1/objekte/{id}/zurueckholen |
Administration |
Rücksynchronisation anstoßen, Zuordnung zurück auf Hauptserver |
8. Dashboard/Historie
| Methode |
Pfad |
Rolle |
Zweck |
| GET |
/api/v1/dashboard/kennzahlen |
Materialverantwortlicher, Leitung, Administration |
Kennzahlen (Prompt 12) |
| GET |
/api/v1/dashboard/ablaufdaten |
s.o. |
bevorstehende Ablaufdaten (Prompt 14) |
| GET |
/api/v1/historie |
s.o. (gefiltert nach Zuständigkeit) |
globale Audit-Suche (Prompt 13) |
| GET |
/api/v1/objekte/{id}/historie |
alle (eigene Objekte) |
objektbezogene Historie |
9. Validierung/Fehlerfälle (Beispiele)
- Mindermenge genehmigen ohne Begründung → 422, Feld
begruendung Pflicht (Prompt 04).
- Mindermenge genehmigen durch Mitarbeiter-Rolle → 403 (Prompt 05).
- Nachfüllung mit Menge, die Ist über Soll hebt → entschieden: erlauben (kein 422), Response kennzeichnet den Fall als „Überbestand"-Info (Prompt 02.4), löst keinen Fehlbestand aus.
- Kontrolle abschließen, obwohl Positionen unbearbeitet → 409, Liste fehlender Positionen im Response.
- Doppeltes Duplizieren mit gleichem Code → 409 (Code muss eindeutig sein, Prompt 09).
10. Auditierung auf API-Ebene
- Jede schreibende Aktion protokolliert automatisch Server-Zeitstempel + Benutzer-ID aus Token (nie Client-Wert) in
historie (Prompt 13/20).
Referenzen
Bezug: 19_technische_architektur, 20_datenbank_schema, 05_rollen_rechte