3.1 KiB
3.1 KiB
GET /article/search
Protected. Requires a valid session cookie (credentials: 'include').
Fuzzy article search against JTL-Wawi (MSSQL). Use this to build a search box / result list.
Query parameters
| Param | Required | Description |
|---|---|---|
target |
yes | Search string. Split on spaces; each word must match (AND). Each word is matched with LIKE %word% against EAN, supplier article number, name, article number, or barcode. |
filter |
no | Comma-separated category IDs. Omit or leave empty to search all categories. See Category filter. |
Search behaviour
- Multiple spaces are collapsed to one.
- Example:
target=bizz allmix→ bothbizzandallmixmust match somewhere on the article. - By default only active articles (
cAktiv = 'Y') are returned. - Without a category filter, at most 2000 rows are returned.
- Results are ordered by product name ascending.
Category filter
filter value |
Effect |
|---|---|
| (omitted or empty) | All categories; TOP 2000 |
751 |
Include inactive articles (no cAktiv = 'Y' restriction). Still uses category branch logic if other IDs are present. |
16 or 16,39 |
Restrict to articles in those categories (OR). No row limit. |
Pass category IDs as a comma-separated list: filter=16,39.
Response 200
{
"katagg": {
"16": 12,
"39": 8
},
"recordset": [
{
"katList": "16,39",
"fVerfuegbar": 0,
"kArtikel": 49,
"fBestand": null,
"cArtNr": "42000044",
"cName": "BioBizz AllMix Peat Free 20L",
"fVKNEtto": 11.3445378151261,
"kSteuerklasse": 1
}
]
}
recordset[] fields
| Field | Type | Notes |
|---|---|---|
kArtikel |
number | Internal article ID |
cArtNr |
string | Article number — pass to GET /article/get |
cName |
string | Display name |
fBestand |
number | null | Stock in warehouse 1 |
fVerfuegbar |
number | null | Available stock |
fVKNEtto |
number | Net sales price |
kSteuerklasse |
number | Tax class: 1 = 19%, 2 = 7%, 3 = 0% |
katList |
string | null | Comma-separated category IDs on the article |
katagg
Map of category ID → count of matching articles in that category (including parent categories in the tree). Use for category sidebar / facet counts.
Display price (frontend)
Brutto VK is not returned; compute client-side using GET /misc/getSteuer:
function getBrutto(netto, kSteuerklasse, steuerklassen) {
const row = steuerklassen.find((s) => s.kSteuerklasse === kSteuerklasse);
if (!row) return null;
return netto * (1 + row.fSteuersatz / 100);
}
Errors
| Status | Body |
|---|---|
| 400 | { "error": "Query parameter \"target\" is required" } |
| 401 | { "error": "Unauthorized" } |
| 500 | { "error": "..." } |
Example
const res = await fetch(
'http://localhost:4208/api/article/search?target=bizz%20allmix',
{ credentials: 'include' }
);
const { katagg, recordset } = await res.json();