From 468a08c5a3f825d489d0a02a1253bc29efdc7c4f Mon Sep 17 00:00:00 2001 From: Jens Beckmann Date: Wed, 17 Jun 2026 17:38:10 +0000 Subject: [PATCH] =?UTF-8?q?Doku/Tasks/03=5Frouten.md=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Doku/Tasks/03_routen.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Doku/Tasks/03_routen.md diff --git a/Doku/Tasks/03_routen.md b/Doku/Tasks/03_routen.md new file mode 100644 index 0000000..00f00aa --- /dev/null +++ b/Doku/Tasks/03_routen.md @@ -0,0 +1,35 @@ + +## 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. | +