Add multi-printer support to label agent
This commit is contained in:
+44
-7
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user