GET/api/v1/raw-materials
Den Warenstamm lesen — gesucht, gefiltert, nach Unterdeckung eingegrenzt, seitenweise.
Rechte
rawMaterials:readPlan-Merkmal warenwirtschaft — fehlt es dem Betrieb, antwortet die Route mit 402 plan_upgrade_required.
Abfrageparameter
| Name | Typ | Bedeutung |
|---|---|---|
q | string, 2–200 Zeichen | Volltext über `name`, `sku` und `brand`. Mindestens zwei Zeichen — ein einzelnes Zeichen läse über `LIKE %a%` die ganze Tabelle. |
sku | string, 1–64 Zeichen | EXAKTER Treffer, kein Teiltext. Das ist die Auflösung eines gescannten Codes; sie trifft genau eine Ware oder keine. |
active | true | false | `true` nur Waren in Verwendung, `false` nur die stillgelegten. Fehlt der Parameter, kommen beide. |
supplierId | UUID oder `none` | Waren dieses Lieferanten. Der Sonderwert `none` liefert die Waren OHNE Lieferantenzuordnung — die Lücke, die man vor einer Ausschreibung sucht. |
packageUnit | Einheit (siehe unten) | Nur Waren mit dieser Gebindeeinheit, z. B. `KILOGRAM`. Ein unbekannter Wert ist 400, kein leeres Ergebnis. |
stock | below | zero | tracked | untracked | `below` = Gesamtbestand unter `minStock`, der Bestellvorschlag. `zero` = nirgends Bestand. `tracked` = wird in mindestens einem Lager geführt. `untracked` = in keinem Lager angelegt — das ist etwas anderes als `zero`: die Ware wird gar nicht bestandsgeführt. |
ids | Kommaliste, höchstens 100 UUIDs | Genau diese Waren. Duplikate fallen weg. Der richtige Weg, um zu Zutaten eines Rezepts die Namen nachzuladen — statt 30 Einzelabrufe. |
updatedAtFrom | ISO-8601 | Nur seit diesem Zeitpunkt geänderte Waren. Zusammen mit `sort=updatedAt` der Filter für den inkrementellen Abgleich. |
updatedAtTo | ISO-8601 | Obergrenze des Änderungsfensters. |
sort | name | updatedAt | createdAtVorgabe: name | Sortierfeld. Für einen Abgleich ist `updatedAt` richtig, für eine Anzeige `name`. |
dir | asc | descVorgabe: asc | Richtung. Sie steckt im Zeiger und muss über alle Seiten einer Blätterung gleich bleiben. |
limit | integer 1–200Vorgabe: 50 | Zeilen je Seite. Für einen Abgleich `200` — das sind viermal weniger Aufrufe gegen dieselbe Ratenbremse. |
cursor | undurchsichtiger Zeiger | `nextCursor` der vorigen Antwort, unverändert. Er trägt einen Fingerabdruck über Sortierung UND Filter; ein Zeiger aus einer anderen Abfrage ist 400 und keine falsche Seite. |
includeTotal | true | falseVorgabe: false | Ergänzt `total` über alle Treffer — nicht über die Seite. Kostet ein `COUNT(*)`, deshalb nicht voreingestellt. |
Mögliche Fehler
- validation — Unbekannter Parameter, `q` unter zwei Zeichen, `limit` über 200, mehr als 100 `ids`, eine unbekannte `packageUnit` — oder ein `cursor` aus einer anderen Abfrage.
- forbidden — Dem Schlüssel fehlt `rawMaterials:read`.
- plan_upgrade_required — Der Plan des Betriebs enthält die Warenwirtschaft nicht.
- rate_limited — Das Kontingent des Schlüssels oder des Betriebs ist erschöpft.
- Flacher Umschlag: `data`, `nextCursor`, `hasMore`, `limit`, optional `total`.
- Einheiten: MILLILITER, CENTILITER, LITER, MILLIGRAM, GRAM, KILOGRAM, FLUID_OUNCE, CUP, PINT, QUART, GALLON, OUNCE, POUND, TEASPOON, TABLESPOON, DASH, PIECE, BUNCH, SLICE, CAN, BOTTLE, PACK.