Add multi-printer support to label agent

This commit is contained in:
2026-05-30 23:39:48 +02:00
parent aef360402c
commit 26f056684c
9 changed files with 230 additions and 27 deletions
+44 -7
View File
@@ -12,7 +12,7 @@ Alle Endpunkte erfordern einen Bearer Token (JWT oder API-Key):
Authorization: Bearer {token}
```
`/jobs/next`, `/jobs/:id/image`, `/jobs/:id/printed` und `/jobs/:id/error` benötigen keine spezifische Permission, nur einen gültigen Token. `POST /jobs` und `POST /preview` erfordern `VIEW_SCANNER`.
`/printers/register`, `/jobs/next`, `/jobs/:id/image`, `/jobs/:id/printed` und `/jobs/:id/error` benötigen keine spezifische Permission, nur einen gültigen Token. `POST /jobs` und `POST /preview` erfordern `VIEW_SCANNER`.
## 1. Job manuell anlegen (Frontend -> Backend)
@@ -67,7 +67,38 @@ Content-Type: image/png
Body: binäres PNG-Bild.
## 3. Nächsten Druckjob abrufen (Agent-Polling)
## 3. Drucker registrieren (Agent-Start)
Der Agent ruft diesen Endpunkt beim Start für jeden konfigurierten lokalen Windows-Drucker auf.
```http
POST /api/label-print-agent/printers/register
Content-Type: application/json
```
```json
{
"printerId": "PC-BUERO_ZEBRA_GK420D",
"agentId": "PC-BUERO",
"name": "Zebra GK420 Büro",
"windowsPrinterName": "Zebra GK420d",
"dpi": 203,
"defaultWidthMm": 101,
"defaultHeightMm": 76
}
```
### Antwort
```http
200 OK
```
```json
{ "ok": true }
```
## 4. Nächsten Druckjob abrufen (Agent-Polling)
```http
GET /api/label-print-agent/jobs/next?agentId={agentId}
@@ -92,7 +123,10 @@ Content-Type: application/json
```json
{
"jobId": "42",
"jobId": 42,
"printerId": "PC-BUERO_ZEBRA_GK420D",
"labelType": "artikel",
"windowsPrinterName": "Zebra GK420d",
"labelImageBase64": "iVBORw0KGgoAAAANSUhEUgAA...",
"labelImageContentType": "image/png",
"labelWidthMm": 57,
@@ -103,13 +137,16 @@ Content-Type: application/json
| Feld | Beschreibung |
| --- | --- |
| `jobId` | Job-ID für Rückmeldungen |
| `printerId` | Backend-ID des Zieldruckers |
| `labelType` | Etikettart, z. B. `artikel` oder `text` |
| `windowsPrinterName` | Exakter lokaler Windows-Druckername, auf den der Agent drucken soll |
| `labelImageBase64` | Base64-PNG; `null` wenn Rendering fehlgeschlagen |
| `labelImageContentType` | Immer `image/png` |
| `labelWidthMm` / `labelHeightMm` | Etikettenmaß in mm |
Das Backend setzt beim Ausliefern einen Lock (5-Minuten-TTL). Jobs mit abgelaufenem Lock werden erneut angeboten.
## 4. Etikettbild separat abrufen
## 5. Etikettbild separat abrufen
Alternativ zum Base64-Feld in `jobs/next`.
@@ -132,7 +169,7 @@ Body: binäres PNG-Bild.
Job oder Bild nicht vorhanden.
## 5. Erfolgreichen Druck melden
## 6. Erfolgreichen Druck melden
```http
POST /api/label-print-agent/jobs/{jobId}/printed
@@ -162,7 +199,7 @@ Alle Felder optional; Fallback jeweils `""` / `unknown`.
Das Backend setzt den Job auf `printed`, speichert Zeitstempel und ruft die konfigurierte `LabelPrintedUrl` des Templates auf (`POST`).
## 6. Druckfehler melden
## 7. Druckfehler melden
```http
POST /api/label-print-agent/jobs/{jobId}/error
@@ -206,7 +243,7 @@ createJob()
(PrintedUrl) (ReleaseUrl)
```
## 7. Server-Sent Events neue Druckaufträge (Push)
## 8. Server-Sent Events neue Druckaufträge (Push)
```http
GET /api/label-print-agent/events