Unvollständige Eingaben bekommen 500, 404 oder den falschen Text (URL-Neuordnung Etappe 3, geerbt) #142

Open
opened 2026-10-24 16:09:12 +00:00 by claude · 0 comments
Collaborator

Gefunden in den Reviews der URL-Neuordnung Etappe 3 (24.10., Branch feature/url-etappe-3, Merge offen). Alles geerbt oder Randfall, darum nicht im Branch behoben. Gemeinsam: Eine unvollständige oder falsche Eingabe bekommt nicht die Antwort, die ADR 0038 vorsieht (Inhalt → 400 mit deutschem Text, nie 500).

  1. PUT /api/liga-categories/{id}/halbserien/{h}/rounds mit [null] → 500. CategoryRoundService.java:123 liest e.slots() auf einem null-Eintrag (NullPointerException). Erwartet: 400.
  2. Turnier anlegen mit form: null (POST /api/competitions, CreateTournamentRequest.CategoryInput, CreateTournamentRequest.java:20): Es entsteht eine Kategorie, die keine Turnierkonkurrenz ist. Danach antwortet jeder Weg unter tournament-categories/{…} mit 400 „Diese Kategorie ist keine Turnierkonkurrenz“. Erwartet: 400 beim Anlegen, form Pflicht im Schema.
  3. DELETE /api/team-matches?halbserie=XY oder eine nicht-numerische ligaCategoryId → 404 statt 400 (JAX-RS kann die Aufzählung bzw. die Zahl nicht lesen, TeamMatchResource.java:96). Wie vorher. Erwartet: 400 mit Text — dasselbe Muster wie type bei GET /api/competitions (Text im Query, Prüfung im Service).
  4. POST /api/competitions prüft Name/Datum/Kategorien erst nach der Phase (TournamentSetupService.java:76 requireRunning → 409 vor 400). Reihenfolge nach ADR 0038 wäre Inhalt zuerst.
  5. Unbekannte Konkurrenz im Pfad (PUT /api/tournament-categories/999/games/{id}) meldet „Turnierspiel nicht gefunden“ (TournamentEntryService.java:307) statt „Konkurrenz nicht gefunden“. Der Status 404 stimmt, nur der Text führt in die Irre.
  6. roundNumber im Cup-Inhalt von POST /api/team-matches ohne Bereichsprüfung: Eine Runde ausserhalb des Tableaus gibt 201 [] statt 400 (im Gesamt-Review nachgeprüft: nie 500). Verwandt mit #141.

Nichts davon trifft das Portal: Es schickt die Felder immer vollständig. Betroffen sind Skripte und veraltete Tabs.

Gefunden in den Reviews der URL-Neuordnung Etappe 3 (24.10., Branch `feature/url-etappe-3`, Merge offen). Alles **geerbt** oder Randfall, darum nicht im Branch behoben. Gemeinsam: Eine unvollständige oder falsche Eingabe bekommt nicht die Antwort, die ADR 0038 vorsieht (Inhalt → `400` mit deutschem Text, nie `500`). 1. **`PUT /api/liga-categories/{id}/halbserien/{h}/rounds` mit `[null]` → `500`.** `CategoryRoundService.java:123` liest `e.slots()` auf einem `null`-Eintrag (NullPointerException). Erwartet: `400`. 2. **Turnier anlegen mit `form: null`** (`POST /api/competitions`, `CreateTournamentRequest.CategoryInput`, `CreateTournamentRequest.java:20`): Es entsteht eine Kategorie, die keine Turnierkonkurrenz ist. Danach antwortet jeder Weg unter `tournament-categories/{…}` mit `400` „Diese Kategorie ist keine Turnierkonkurrenz“. Erwartet: `400` beim Anlegen, `form` Pflicht im Schema. 3. **`DELETE /api/team-matches?halbserie=XY` oder eine nicht-numerische `ligaCategoryId` → `404`** statt `400` (JAX-RS kann die Aufzählung bzw. die Zahl nicht lesen, `TeamMatchResource.java:96`). Wie vorher. Erwartet: `400` mit Text — dasselbe Muster wie `type` bei `GET /api/competitions` (Text im Query, Prüfung im Service). 4. **`POST /api/competitions` prüft Name/Datum/Kategorien erst nach der Phase** (`TournamentSetupService.java:76` `requireRunning` → `409` vor `400`). Reihenfolge nach ADR 0038 wäre Inhalt zuerst. 5. **Unbekannte Konkurrenz im Pfad** (`PUT /api/tournament-categories/999/games/{id}`) meldet „Turnierspiel nicht gefunden“ (`TournamentEntryService.java:307`) statt „Konkurrenz nicht gefunden“. Der Status `404` stimmt, nur der Text führt in die Irre. 6. **`roundNumber` im Cup-Inhalt von `POST /api/team-matches` ohne Bereichsprüfung**: Eine Runde ausserhalb des Tableaus gibt `201 []` statt `400` (im Gesamt-Review nachgeprüft: nie `500`). Verwandt mit #141. Nichts davon trifft das Portal: Es schickt die Felder immer vollständig. Betroffen sind Skripte und veraltete Tabs.
Sign in to join this conversation.
No description provided.