u
This commit is contained in:
@@ -43,6 +43,7 @@ Generated from `@openapi` annotations in [`src/api/routes/`](../../src/api/route
|
||||
| [`routes/article/delete-image.md`](routes/article/delete-image.md) | `DELETE /article/{sku}/image/{fullHash}` |
|
||||
| [`routes/article/order-images.md`](routes/article/order-images.md) | `PUT /article/{sku}/images/order` |
|
||||
| [`routes/article/set-prices.md`](routes/article/set-prices.md) | `PUT /article/{sku}/prices` |
|
||||
| [`routes/article/:sku/print.md`](routes/article/:sku/print.md) | `POST /article/{sku}/print` |
|
||||
| [`routes/article/supplier/list.md`](routes/article/supplier/list.md) | `GET /article/{sku}/supplier` |
|
||||
| [`routes/article/supplier/create.md`](routes/article/supplier/create.md) | `POST /article/{sku}/supplier` |
|
||||
| [`routes/article/supplier/order.md`](routes/article/supplier/order.md) | `PUT /article/{sku}/supplier/order` |
|
||||
@@ -103,6 +104,12 @@ Generated from `@openapi` annotations in [`src/api/routes/`](../../src/api/route
|
||||
| [`routes/events.md`](routes/events.md) | `GET /events` |
|
||||
| [`routes/health.md`](routes/health.md) | `GET /health` |
|
||||
| [`routes/image/get.md`](routes/image/get.md) | `GET /image/{fullHash}` |
|
||||
| [`routes/labeltemplate/list.md`](routes/labeltemplate/list.md) | `GET /labeltemplate` |
|
||||
| [`routes/labeltemplate/create.md`](routes/labeltemplate/create.md) | `POST /labeltemplate` |
|
||||
| [`routes/labeltemplate/delete.md`](routes/labeltemplate/delete.md) | `DELETE /labeltemplate/{id}` |
|
||||
| [`routes/labeltemplate/get.md`](routes/labeltemplate/get.md) | `GET /labeltemplate/{id}` |
|
||||
| [`routes/labeltemplate/update.md`](routes/labeltemplate/update.md) | `PATCH /labeltemplate/{id}` |
|
||||
| [`routes/labeltemplate/update.md`](routes/labeltemplate/update.md) | `PUT /labeltemplate/{id}` |
|
||||
| [`routes/ledger.get.md`](routes/ledger.get.md) | `GET /ledger` |
|
||||
| [`routes/ledger.post.md`](routes/ledger.post.md) | `POST /ledger` |
|
||||
| [`routes/ledger/manifestarticle/:manifestarticleId.md`](routes/ledger/manifestarticle/:manifestarticleId.md) | `GET /ledger/manifestarticle/{manifestarticleId}` |
|
||||
|
||||
@@ -4624,6 +4624,415 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/labeltemplate": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"LabelTemplate"
|
||||
],
|
||||
"summary": "List label templates",
|
||||
"description": "Lists all ZPL label templates for the selected company. The `thumb` field is returned as a base64-encoded PNG string when present. `content.objects` is omitted to reduce payload size.",
|
||||
"security": [
|
||||
{
|
||||
"cookieAuth": []
|
||||
}
|
||||
],
|
||||
"x-markdown": "labeltemplate/list.md",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "List of label templates",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"labeltemplates": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/LabelTemplate"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "No company selected",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"tags": [
|
||||
"LabelTemplate"
|
||||
],
|
||||
"summary": "Create label template",
|
||||
"description": "Creates a new ZPL label template for the selected company.\nA 50×50 1-bit PNG thumbnail is automatically rendered from the content\nand stored with the template.\n",
|
||||
"security": [
|
||||
{
|
||||
"cookieAuth": []
|
||||
}
|
||||
],
|
||||
"x-markdown": "labeltemplate/create.md",
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/LabelTemplateCreateInput"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Created label template",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"labeltemplate": {
|
||||
"$ref": "#/components/schemas/LabelTemplate"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid input or missing fields",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/labeltemplate/{id}": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"LabelTemplate"
|
||||
],
|
||||
"summary": "Get label template by ID",
|
||||
"description": "Retrieves a single label template for the authenticated user's selected company.",
|
||||
"security": [
|
||||
{
|
||||
"cookieAuth": []
|
||||
}
|
||||
],
|
||||
"x-markdown": "labeltemplate/get.md",
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "id",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
},
|
||||
"description": "Label template ID"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Label template details",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"labeltemplate": {
|
||||
"$ref": "#/components/schemas/LabelTemplate"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid ID or no company selected",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Label template not found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"patch": {
|
||||
"tags": [
|
||||
"LabelTemplate"
|
||||
],
|
||||
"summary": "Update label template (partial)",
|
||||
"description": "Updates specified fields of an existing label template.\nWhen `content` (or `width`/`height`) is provided, the thumbnail is automatically re-rendered.\n",
|
||||
"security": [
|
||||
{
|
||||
"cookieAuth": []
|
||||
}
|
||||
],
|
||||
"x-markdown": "labeltemplate/update.md",
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "id",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
},
|
||||
"description": "Label template ID"
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/LabelTemplateUpdateInput"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Updated label template",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"labeltemplate": {
|
||||
"$ref": "#/components/schemas/LabelTemplate"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid input",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Label template not found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"put": {
|
||||
"tags": [
|
||||
"LabelTemplate"
|
||||
],
|
||||
"summary": "Update label template",
|
||||
"description": "Replaces an existing label template.\nWhen `content` (or `width`/`height`) is provided, the thumbnail is automatically re-rendered.\n",
|
||||
"security": [
|
||||
{
|
||||
"cookieAuth": []
|
||||
}
|
||||
],
|
||||
"x-markdown": "labeltemplate/update.md",
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "id",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
},
|
||||
"description": "Label template ID"
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/LabelTemplateUpdateInput"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Updated label template",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"labeltemplate": {
|
||||
"$ref": "#/components/schemas/LabelTemplate"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid input",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Label template not found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"tags": [
|
||||
"LabelTemplate"
|
||||
],
|
||||
"summary": "Delete label template",
|
||||
"description": "Deletes a label template for the authenticated user's selected company.",
|
||||
"security": [
|
||||
{
|
||||
"cookieAuth": []
|
||||
}
|
||||
],
|
||||
"x-markdown": "labeltemplate/delete.md",
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "id",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
},
|
||||
"description": "Label template ID"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"204": {
|
||||
"description": "Label template deleted"
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid ID or no company selected",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Label template not found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/health": {
|
||||
"get": {
|
||||
"tags": [
|
||||
@@ -11200,6 +11609,70 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/article/{sku}/print": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"Article"
|
||||
],
|
||||
"summary": "Print article label",
|
||||
"description": "Prints a label for the article using a label template.",
|
||||
"security": [
|
||||
{
|
||||
"cookieAuth": []
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "sku",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"templateId",
|
||||
"printerId",
|
||||
"quantity"
|
||||
],
|
||||
"properties": {
|
||||
"templateId": {
|
||||
"type": "integer"
|
||||
},
|
||||
"printerId": {
|
||||
"type": "integer"
|
||||
},
|
||||
"quantity": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Print job dispatched"
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid parameters"
|
||||
},
|
||||
"404": {
|
||||
"description": "Printer, Template or Article not found"
|
||||
},
|
||||
"500": {
|
||||
"description": "Server error"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/auth/selected-company": {
|
||||
"put": {
|
||||
"tags": [
|
||||
|
||||
39
docs/api/routes/article/:sku/print.md
Normal file
39
docs/api/routes/article/:sku/print.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# `POST /article/{sku}/print`
|
||||
|
||||
Protected. Requires a valid session cookie (`credentials: 'include'`).
|
||||
|
||||
Print article label
|
||||
|
||||
Prints a label for the article using a label template.
|
||||
|
||||
## Path parameters
|
||||
|
||||
| Param | Required | Type | Description |
|
||||
|-------|----------|------|-------------|
|
||||
| `sku` | yes | string | |
|
||||
|
||||
## Body (JSON)
|
||||
|
||||
```json
|
||||
{
|
||||
"templateId": 1,
|
||||
"printerId": 1,
|
||||
"quantity": 1
|
||||
}
|
||||
```
|
||||
|
||||
## Response `200`
|
||||
|
||||
Print job dispatched
|
||||
|
||||
## Errors
|
||||
|
||||
| Status | Description |
|
||||
|--------|-------------|
|
||||
| 400 | Invalid parameters |
|
||||
| 404 | Printer, Template or Article not found |
|
||||
| 500 | Server error |
|
||||
|
||||
---
|
||||
|
||||
_Generated from `@openapi` JSDoc. Do not edit by hand — run `npm run docs:api`._
|
||||
@@ -5,54 +5,26 @@ Protected. Requires a valid session cookie (`credentials: 'include'`).
|
||||
Create label template
|
||||
|
||||
Creates a new ZPL label template for the selected company.
|
||||
A 50×50 1-bit PNG thumbnail is automatically rendered from the content and stored with the template.
|
||||
A 50×50 1-bit PNG thumbnail is automatically rendered from the content
|
||||
and stored with the template.
|
||||
|
||||
|
||||
## Body (JSON)
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "…",
|
||||
"width": 448,
|
||||
"height": 200,
|
||||
"dpi": 203,
|
||||
"type": "zpl",
|
||||
"content": {
|
||||
"objects": []
|
||||
}
|
||||
}
|
||||
{}
|
||||
```
|
||||
|
||||
| Field | Required | Type | Description |
|
||||
|-------|----------|------|-------------|
|
||||
| `name` | yes | string | Template name |
|
||||
| `width` | yes | integer | Canvas width in pixels |
|
||||
| `height` | yes | integer | Canvas height in pixels |
|
||||
| `dpi` | yes | integer | Printer DPI — `203` or `300` |
|
||||
| `type` | yes | string | Template type — `"zpl"` |
|
||||
| `content` | yes | object | Label editor JSON content |
|
||||
|
||||
## Response `201`
|
||||
|
||||
Created label template
|
||||
|
||||
```json
|
||||
{
|
||||
"labeltemplate": {
|
||||
"id": 1,
|
||||
"company_id": 1,
|
||||
"name": "…",
|
||||
"width": 448,
|
||||
"height": 200,
|
||||
"dpi": 203,
|
||||
"type": "zpl",
|
||||
"content": {},
|
||||
"thumb": "…"
|
||||
}
|
||||
"labeltemplate": {}
|
||||
}
|
||||
```
|
||||
|
||||
`thumb` is a base64-encoded 50×50 1-bit PNG string, or `null` if rendering failed.
|
||||
|
||||
## Errors
|
||||
|
||||
| Status | Description |
|
||||
|
||||
@@ -4,7 +4,7 @@ Protected. Requires a valid session cookie (`credentials: 'include'`).
|
||||
|
||||
Get label template by ID
|
||||
|
||||
Retrieves a single label template for the authenticated user's selected company. The `thumb` field is always included inline as a base64-encoded 50×50 1-bit PNG string (`null` if not yet rendered).
|
||||
Retrieves a single label template for the authenticated user's selected company.
|
||||
|
||||
## Path parameters
|
||||
|
||||
@@ -18,17 +18,7 @@ Label template details
|
||||
|
||||
```json
|
||||
{
|
||||
"labeltemplate": {
|
||||
"id": 1,
|
||||
"company_id": 1,
|
||||
"name": "…",
|
||||
"width": 448,
|
||||
"height": 200,
|
||||
"dpi": 203,
|
||||
"type": "zpl",
|
||||
"content": {},
|
||||
"thumb": "…"
|
||||
}
|
||||
"labeltemplate": {}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Protected. Requires a valid session cookie (`credentials: 'include'`).
|
||||
|
||||
List label templates
|
||||
|
||||
Lists all ZPL label templates for the selected company. The `thumb` field is always included inline as a base64-encoded 50×50 1-bit PNG string (`null` if not yet rendered).
|
||||
Lists all ZPL label templates for the selected company. The `thumb` field is returned as a base64-encoded PNG string when present. `content.objects` is omitted to reduce payload size.
|
||||
|
||||
## Response `200`
|
||||
|
||||
@@ -13,17 +13,7 @@ List of label templates
|
||||
```json
|
||||
{
|
||||
"labeltemplates": [
|
||||
{
|
||||
"id": 1,
|
||||
"company_id": 1,
|
||||
"name": "…",
|
||||
"width": 448,
|
||||
"height": 200,
|
||||
"dpi": 203,
|
||||
"type": "zpl",
|
||||
"content": {},
|
||||
"thumb": "…"
|
||||
}
|
||||
{}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# `PATCH /labeltemplate/{id}`
|
||||
# `PUT /labeltemplate/{id}`
|
||||
|
||||
Protected. Requires a valid session cookie (`credentials: 'include'`).
|
||||
|
||||
Update label template (partial)
|
||||
Update label template
|
||||
|
||||
Updates specified fields of an existing label template for the selected company.
|
||||
When `content`, `width`, or `height` is provided, the thumbnail is automatically re-rendered.
|
||||
Replaces an existing label template.
|
||||
When `content` (or `width`/`height`) is provided, the thumbnail is automatically re-rendered.
|
||||
|
||||
Also available as `PUT /labeltemplate/{id}`.
|
||||
|
||||
## Path parameters
|
||||
|
||||
@@ -17,47 +16,17 @@ Also available as `PUT /labeltemplate/{id}`.
|
||||
|
||||
## Body (JSON)
|
||||
|
||||
All fields are optional.
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "…",
|
||||
"width": 448,
|
||||
"height": 200,
|
||||
"dpi": 203,
|
||||
"type": "zpl",
|
||||
"content": {
|
||||
"objects": []
|
||||
}
|
||||
}
|
||||
{}
|
||||
```
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `name` | string | Template name |
|
||||
| `width` | integer | Canvas width in pixels |
|
||||
| `height` | integer | Canvas height in pixels |
|
||||
| `dpi` | integer | Printer DPI — `203` or `300` |
|
||||
| `type` | string | Template type — `"zpl"` |
|
||||
| `content` | object | Label editor JSON content |
|
||||
|
||||
## Response `200`
|
||||
|
||||
Updated label template
|
||||
|
||||
```json
|
||||
{
|
||||
"labeltemplate": {
|
||||
"id": 1,
|
||||
"company_id": 1,
|
||||
"name": "…",
|
||||
"width": 448,
|
||||
"height": 200,
|
||||
"dpi": 203,
|
||||
"type": "zpl",
|
||||
"content": {},
|
||||
"thumb": "…"
|
||||
}
|
||||
"labeltemplate": {}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user