Anti-Pattern §25 + DOJO §5 Warnung: conditionType ist Pflicht

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 <noreply@anthropic.com>
This commit is contained in:
Sebastian Poll
2026-06-05 12:04:38 +00:00
parent 0240f9e5cf
commit ba08f6894e
2 changed files with 58 additions and 0 deletions
+49
View File
@@ -374,3 +374,52 @@ const rows = Array.isArray(data) ? data
Oder einen `findFirstArray()`-Helper. **Siehe DOJO #37, #38** 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.**
---
+9
View File
@@ -148,6 +148,15 @@ const data = await client.search('/rest/orders/search', {
**Operatoren:** `gte` (>=), `gt` (>), `lte` (<=), `lt` (<), `eq` (=), `in` (in Array). **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 ## 6. With-Parameter: Was man wirklich braucht