This commit is contained in:
seb
2026-09-30 09:47:59 +02:00
parent 1de802fbaa
commit 82cc138ba6
15 changed files with 624 additions and 11 deletions

View File

@@ -184,6 +184,7 @@ Generated from `@openapi` annotations in [`src/api/routes/`](../../src/api/route
| [`routes/unit/list.md`](routes/unit/list.md) | `GET /unit` |
| [`routes/unit/upsert.md`](routes/unit/upsert.md) | `PUT /unit` |
| [`routes/pos/client.md`](routes/pos/client.md) | `GET /v1/client` |
| [`routes/pos/init.md`](routes/pos/init.md) | `GET /v1/init` |
| [`routes/warehouse/list.md`](routes/warehouse/list.md) | `GET /warehouse` |
| [`routes/warehouse/create.md`](routes/warehouse/create.md) | `POST /warehouse` |
| [`routes/warehouse/order.md`](routes/warehouse/order.md) | `PUT /warehouse/order` |

View File

@@ -8804,7 +8804,7 @@
"Category"
],
"summary": "Articles in category",
"description": "Returns articles in a category the user is authorized for.",
"description": "Returns articles in a category the user is authorized for (omits child articles of a father article). Each article includes `childCount` (the number of its child articles).",
"security": [
{
"cookieAuth": []
@@ -8834,6 +8834,62 @@
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"sku": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"net": {
"type": "number",
"nullable": true
},
"taxRate": {
"type": "number",
"nullable": true
},
"track_stock": {
"type": "boolean"
},
"optionsCount": {
"type": "integer"
},
"articleListCount": {
"type": "integer"
},
"childCount": {
"type": "integer",
"description": "Number of child articles belonging to this article"
},
"fullHash": {
"type": "string",
"nullable": true
},
"thumbW": {
"type": "integer",
"nullable": true
},
"thumbH": {
"type": "integer",
"nullable": true
},
"thumbHash": {
"type": "string",
"nullable": true
},
"brand": {
"type": "object",
"nullable": true,
"additionalProperties": true
}
},
"additionalProperties": true
}
}
@@ -13016,7 +13072,7 @@
},
"put": {
"summary": "Set Stückliste (bundle items) for an article",
"description": "Configures the article as a Stückliste covering a list of count * article. An article that is a father or has options cannot be a Stückliste. Pass an empty array to remove the Stückliste.",
"description": "Configures the article as a Stückliste covering a list of count * article. A father article cannot be a Stückliste. Can be combined with options. Pass an empty array to remove the Stückliste.",
"tags": [
"Article"
],
@@ -13172,7 +13228,7 @@
},
"put": {
"summary": "Set options list for an article",
"description": "Configures options for an article. Some options can be mandated (come with the article in any case). An article that is a father or a Stückliste cannot have options. Pass an empty array to remove options.",
"description": "Configures options for an article. Some options can be mandated (come with the article in any case). A father article cannot have options. Can be combined with a Stückliste. Pass an empty array to remove options.",
"tags": [
"Article"
],
@@ -13520,6 +13576,164 @@
}
}
},
"/v1/init": {
"get": {
"tags": [
"POS"
],
"summary": "POS sync initialization counts",
"description": "Returns entity change counts since the provided `lastChanged*` unix timestamp cursors\nfor the authenticated POS terminal (`Authorization: Bearer <authToken>`).\n",
"x-markdown": "pos/init.md",
"parameters": [
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string"
},
"description": "POS device authToken obtained during pairing (`Bearer <token>` or `<token>`)",
"example": "Bearer c30099b66ec1fcb9ccd05795423c94e8"
},
{
"in": "query",
"name": "lastChangedProduct",
"required": false,
"schema": {
"type": "integer",
"default": 0
},
"description": "Unix timestamp of last synced product update",
"example": 0
},
{
"in": "query",
"name": "lastChangedCategory",
"required": false,
"schema": {
"type": "integer",
"default": 0
},
"description": "Unix timestamp of last synced category update",
"example": 0
},
{
"in": "query",
"name": "lastChangedCustomer",
"required": false,
"schema": {
"type": "integer",
"default": 0
},
"description": "Unix timestamp of last synced customer update",
"example": 0
},
{
"in": "query",
"name": "lastChangedCustomerGroup",
"required": false,
"schema": {
"type": "integer",
"default": 0
},
"description": "Unix timestamp of last synced customer group update",
"example": 0
},
{
"in": "query",
"name": "lastChangedCompositeProduct",
"required": false,
"schema": {
"type": "integer",
"default": 0
},
"description": "Unix timestamp of last synced composite product update",
"example": 0
},
{
"in": "query",
"name": "lastChangedDeletedEntity",
"required": false,
"schema": {
"type": "integer",
"default": 0
},
"description": "Unix timestamp of last synced deleted entity",
"example": 0
}
],
"responses": {
"200": {
"description": "Sync initialization counts",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"version": {
"type": "string",
"example": "1.10.12.0"
},
"product_count": {
"type": "string",
"example": "19"
},
"category_count": {
"type": "string",
"example": "4"
},
"customer_count": {
"type": "string",
"example": "0"
},
"customerGroup_count": {
"type": "string",
"example": "1"
},
"compositeProduct_count": {
"type": "string",
"example": "0"
},
"configurationGroup_count": {
"type": "string",
"example": "0"
},
"configurationItem_count": {
"type": "string",
"example": "0"
},
"deletedEntity_count": {
"type": "string",
"example": "0"
},
"max_orderId_count": {
"type": "string",
"example": "0"
}
}
}
}
}
},
"401": {
"description": "Missing or invalid POS Authorization token",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"Message": {
"type": "string",
"example": "Authorization has been denied for this request."
}
}
}
}
}
}
}
}
},
"/v1/client": {
"get": {
"tags": [

View File

@@ -4,7 +4,7 @@ Protected. Requires a valid session cookie (`credentials: 'include'`).
Set Stückliste (bundle items) for an article
Configures the article as a Stückliste covering a list of count * article. An article that is a father or has options cannot be a Stückliste. Pass an empty array to remove the Stückliste.
Configures the article as a Stückliste covering a list of count * article. A father article cannot be a Stückliste. Can be combined with options. Pass an empty array to remove the Stückliste.
## Path parameters

View File

@@ -4,7 +4,7 @@ Protected. Requires a valid session cookie (`credentials: 'include'`).
Set options list for an article
Configures options for an article. Some options can be mandated (come with the article in any case). An article that is a father or a Stückliste cannot have options. Pass an empty array to remove options.
Configures options for an article. Some options can be mandated (come with the article in any case). A father article cannot have options. Can be combined with a Stückliste. Pass an empty array to remove options.
## Path parameters

View File

@@ -4,7 +4,7 @@ Protected. Requires a valid session cookie (`credentials: 'include'`).
Articles in category
Returns articles in a category the user is authorized for.
Returns articles in a category the user is authorized for (omits child articles of a father article). Each article includes `childCount` (the number of its child articles).
## Path parameters
@@ -19,7 +19,23 @@ Articles list
```json
{
"articles": [
{}
{
"id": 1,
"sku": "…",
"name": "…",
"slug": "…",
"net": 1,
"taxRate": 1,
"track_stock": true,
"optionsCount": 1,
"articleListCount": 1,
"childCount": 1,
"fullHash": "…",
"thumbW": 1,
"thumbH": 1,
"thumbHash": "…",
"brand": {}
}
]
}
```

View File

@@ -0,0 +1,49 @@
# `GET /v1/init`
Protected. Requires a valid session cookie (`credentials: 'include'`).
POS sync initialization counts
Returns entity change counts since the provided `lastChanged*` unix timestamp cursors
for the authenticated POS terminal (`Authorization: Bearer <authToken>`).
## Query parameters
| Param | Required | Type | Description |
|-------|----------|------|-------------|
| `lastChangedProduct` | no | integer | Unix timestamp of last synced product update |
| `lastChangedCategory` | no | integer | Unix timestamp of last synced category update |
| `lastChangedCustomer` | no | integer | Unix timestamp of last synced customer update |
| `lastChangedCustomerGroup` | no | integer | Unix timestamp of last synced customer group update |
| `lastChangedCompositeProduct` | no | integer | Unix timestamp of last synced composite product update |
| `lastChangedDeletedEntity` | no | integer | Unix timestamp of last synced deleted entity |
## Response `200`
Sync initialization counts
```json
{
"version": "1.10.12.0",
"product_count": "19",
"category_count": "4",
"customer_count": "0",
"customerGroup_count": "1",
"compositeProduct_count": "0",
"configurationGroup_count": "0",
"configurationItem_count": "0",
"deletedEntity_count": "0",
"max_orderId_count": "0"
}
```
## Errors
| Status | Description |
|--------|-------------|
| 401 | Missing or invalid POS Authorization token |
---
_Generated from `@openapi` JSDoc. Do not edit by hand — run `npm run docs:api`._