Files
4plants/Doku/Tasks/03_routen.md
T

2.1 KiB

1. Zielsetzung

Bereitstellung einer REST-API zur Verwaltung des Saatgut-Inventars inklusive strikter Sicherheitsprüfungen und Logik-Validierungen.

2. Endpunkt-Definitionen

2.1 Katalog (Public/Read)

Endpunkt Methode Parameter Antwort AK / Testfall
/api/kategorien GET - 200 OK [JSON] Liste ist nicht leer, wenn DB gefüllt ist.
/api/pflanzen GET ?kategorie_id=X, ?suche=Y 200 OK [JSON] Filterung reduziert Ergebnismenge korrekt.

2.2 Inventar (Protected / JWT required)

Endpunkt Methode Parameter Antwort AK / Testfall
/api/mein-saatgut GET - 200 OK [JSON] Nur Einträge der eigenen nutzer_id sichtbar.
/api/mein-saatgut POST Body (JSON) 201 Created Fehlende Pflichtfelder \rightarrow 400 Bad Request.
/api/mein-saatgut/{id} PATCH Body (JSON) 200 OK Fremde ID \rightarrow 403 Forbidden.
/api/mein-saatgut/{id} DELETE - 204 No Content Fremde ID \rightarrow 403 Forbidden.

3. Logik-Schicht (Service-Layer) & Unit Tests

Die Geschäftslogik wird in dedizierten Services implementiert und unabhängig vom HTTP-Kontext getestet.

3.1 Business Rules (AKs für Logik-Tests)

  • Validierung Ablaufdatum: Der Service muss eine Exception werfen, wenn das kaufdatum zeitlich nach dem ablaufdatum liegt.
  • Katalog-Existenz: Bevor ein Eintrag in SaatgutBestand erstellt wird, muss geprüft werden, ob die pflanze_id im Katalog existiert \rightarrow sonst Fehler werfen.
  • Besitzprüfung: Die Methode isOwner(Nutzer, SaatgutEintrag) muss strikt prüfen, ob die IDs übereinstimmen.

3.2 Test-Matrix

Ebene Tool Fokus Ziel
Functional WebTestCase End-to-End API Flow HTTP Statuscodes & JSON Struktur prüfen.
Unit PHPUnit Business Logic Edge Cases (z.B. Datumsfehler) isoliert testen.
Integration JWT/Mock Security / Isolation Sicherstellen, dass Nutzer A niemals Daten von B sieht.