From ba08f6894ef84500dc72f42d5f8ff0320c99419c Mon Sep 17 00:00:00 2001 From: Sebastian Poll Date: Fri, 5 Jun 2026 12:04:38 +0000 Subject: [PATCH] =?UTF-8?q?Anti-Pattern=20=C2=A725=20+=20DOJO=20=C2=A75=20?= =?UTF-8?q?Warnung:=20conditionType=20ist=20Pflicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POST /rest/orders/search ignoriert den fields-Array komplett wenn conditionType ('and' oder 'or') fehlt. Kein Fehler, HTTP 200, stille Verschluckung — die Suche liefert dann den vollen Auftragsbestand. Entdeckt 2026-06-01 beim Fulfilment-Sync-Umbau (ServerShop24, PID 7843): sechs verschiedene statusId-Filter-Schreibweisen gaben alle 496.410 Treffer zurück. Nach Ergänzung von conditionType:'and' wirkten alle korrekt (1-7744 Treffer je nach Bedingung). Co-Authored-By: Claude Opus 4.7 --- ANTI-PATTERNS.md | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ DOJO.md | 9 +++++++++ 2 files changed, 58 insertions(+) diff --git a/ANTI-PATTERNS.md b/ANTI-PATTERNS.md index 153a58b..6ea3ab2 100644 --- a/ANTI-PATTERNS.md +++ b/ANTI-PATTERNS.md @@ -374,3 +374,52 @@ const rows = Array.isArray(data) ? data Oder einen `findFirstArray()`-Helper. **Siehe DOJO #37, #38** --- + +## 25. `POST /rest/orders/search` ohne `conditionType` aufrufen + +```javascript +// FALSCH — wirkt wie KEIN Filter, gibt alle 500.000+ Aufträge zurück +const data = await api.search('/rest/orders/search', { + page: 1, itemsPerPage: 250, + fields: [{ field: 'statusId', operator: 'eq', value: 5.1 }], +}); +// → totalsCount: 496410 (kompletter Bestand!) + +// RICHTIG — Filter werden korrekt AND-verknüpft angewendet +const data = await api.search('/rest/orders/search', { + page: 1, itemsPerPage: 250, + conditionType: 'and', // ⚠️ PFLICHT — sonst werden fields ignoriert + fields: [{ field: 'statusId', operator: 'eq', value: 5.1 }], +}); +// → totalsCount: 1 (korrekt gefiltert) +``` + +**Problem:** Ohne `conditionType: 'and'` (oder `'or'`) wird der gesamte +`fields`-Array von Plenty **stumm ignoriert**. Kein Fehler, HTTP 200, kein +Hinweis in der Response — nur das Filterergebnis ist falsch. Symptom: jede +Pagination zieht die kompletten 1.578 Seiten Auftragshistorie statt der +erwarteten Treffer. + +**Beweis:** Sechs Filtervarianten (eq/lt/in/Range) ergaben alle dieselben +496.410 Treffer wie ein Call ganz ohne Filter. Sobald `conditionType: 'and'` +ergänzt wurde, wirkten die Filter korrekt (1, 3, 91, 7.744 Treffer je nach +Bedingung). + +**Fix:** Immer `conditionType` setzen, selbst bei nur einem Filter. Beim +Erstellen eines Search-Bodys folgendes Pattern verwenden: + +```javascript +const body = { + page: 1, itemsPerPage: 250, + conditionType: 'and', // immer setzen, nicht vergessen + fields: [...], + with: [...], +}; +``` + +**Entdeckt:** 2026-06-01 beim Aufbau eines doppelten Boden-Syncs für +Fulfilment (ServerShop24, PID 7843). Erste Smoke-Tests deuteten auf einen +kaputten Filter — der echte Bug war das fehlende `conditionType`. +**Siehe DOJO.md §5.** + +--- diff --git a/DOJO.md b/DOJO.md index 2867f8d..4c6ff8a 100644 --- a/DOJO.md +++ b/DOJO.md @@ -148,6 +148,15 @@ const data = await client.search('/rest/orders/search', { **Operatoren:** `gte` (>=), `gt` (>), `lte` (<=), `lt` (<), `eq` (=), `in` (in Array). +**⚠️ Achtung — `conditionType` darf nicht fehlen:** Ohne `conditionType: 'and'` +(oder `'or'`) wird der **gesamte `fields`-Array stumm ignoriert**. Plenty +antwortet mit HTTP 200, ohne Fehler, ohne Warnung — aber die Suche liefert +alle Aufträge, als wäre kein Filter gesetzt. Siehe **ANTI-PATTERNS.md §25**. + +Status-Filter sind besonders davon betroffen, weil das Symptom („Suche +gibt zu viele Treffer") leicht als „Filter funktioniert nicht" fehlinterpretiert +wird — der wahre Bug ist eine Zeile höher. + --- ## 6. With-Parameter: Was man wirklich braucht