Prämisse aktualisiert (2026-06-24)
Hinweis: Dieses Issue wurde ursprünglich vor Phase 1k.1a (Layout-Engine) geschrieben und
basierte auf Annahmen (templates-Tabelle, TemplateLoader, `templates:write` Scope), die in
Phase 1k.1a vollständig entfernt wurden. Die Beschreibung unten gibt den tatsächlichen Stand
der Umsetzung (Variante B/B1) wieder.
Parent
Phase 1k Umbrella: #101
Depends-on
Phase 1k.1 Layout-Engine: #103
Problem
Nach Phase 1k.1a läuft das Rendering vollständig über die LayoutEngine (Enum content_type +
tape_mm + LabelData). Es gibt keine User-Templates mehr im alten Sinne — die templates-Tabelle,
der TemplateLoader und der Scope templates:write existieren nicht. Es gab jedoch eine ungenutzte
presets-Tabelle, die als Grundlage für Layout-Presets (Variante B/B1) dient.
Benutzende haben keinen Weg, häufig genutzte Kombinationen aus content_type + tape_mm +
Label-Metadaten dauerhaft zu speichern und beim Druck per preset_id abzurufen.
Lösung (Variante B/B1 — umgesetzt)
Die presets-Tabelle wird zum Layout-Preset-Store ausgebaut. Ein PresetService übernimmt
Validierung und CRUD. Der Druck-Pfad bleibt vollständig unangetastet.
Scope
In:
presets-Tabelle erweitern (Felder content_type, tape_mm, Preset-Metadaten)
PresetService (Validierung + CRUD-Logik)
- Router
/api/v1/presets:
POST /api/v1/presets — Preset erstellen
GET /api/v1/presets — alle Presets auflisten
GET /api/v1/presets/{id} — Preset abrufen
PUT /api/v1/presets/{id} — Preset aktualisieren
DELETE /api/v1/presets/{id} — Preset löschen
GET /api/v1/presets/{id}/preview.png — Vorschau via bestehender LayoutEngine
- Auth: Schreibzugriffe erfordern
require_print, Lesezugriffe require_read
content_type-Default: qr_three_lines
- Volle Unterstützung für
content_type=qr_with_listing
Out (Folge-Arbeit):
- Geometrie-Overrides (benutzerdefinierte x/y-Positionen pro Preset)
- Editor-UI in Hangar (Companion-Issue, wird separat erstellt)
- Versionierung von Presets
- Sharing/Marketplace
Auth-Modell
3-stufiges Scope-System (wie im Rest der API):
- Lesend (
GET): require_read
- Schreibend (
POST, PUT, DELETE): require_print
- kein eigener Scope
templates:write
Akzeptanzkriterien
Referenzen
Prämisse aktualisiert (2026-06-24)
Parent
Phase 1k Umbrella: #101
Depends-on
Phase 1k.1 Layout-Engine: #103
Problem
Nach Phase 1k.1a läuft das Rendering vollständig über die
LayoutEngine(Enumcontent_type+tape_mm+LabelData). Es gibt keine User-Templates mehr im alten Sinne — dietemplates-Tabelle,der
TemplateLoaderund der Scopetemplates:writeexistieren nicht. Es gab jedoch eine ungenutztepresets-Tabelle, die als Grundlage für Layout-Presets (Variante B/B1) dient.Benutzende haben keinen Weg, häufig genutzte Kombinationen aus
content_type+tape_mm+Label-Metadaten dauerhaft zu speichern und beim Druck per
preset_idabzurufen.Lösung (Variante B/B1 — umgesetzt)
Die
presets-Tabelle wird zum Layout-Preset-Store ausgebaut. EinPresetServiceübernimmtValidierung und CRUD. Der Druck-Pfad bleibt vollständig unangetastet.
Scope
In:
presets-Tabelle erweitern (Feldercontent_type,tape_mm, Preset-Metadaten)PresetService(Validierung + CRUD-Logik)/api/v1/presets:POST /api/v1/presets— Preset erstellenGET /api/v1/presets— alle Presets auflistenGET /api/v1/presets/{id}— Preset abrufenPUT /api/v1/presets/{id}— Preset aktualisierenDELETE /api/v1/presets/{id}— Preset löschenGET /api/v1/presets/{id}/preview.png— Vorschau via bestehender LayoutEnginerequire_print, Lesezugrifferequire_readcontent_type-Default:qr_three_linescontent_type=qr_with_listingOut (Folge-Arbeit):
Auth-Modell
3-stufiges Scope-System (wie im Rest der API):
GET):require_readPOST,PUT,DELETE):require_printtemplates:writeAkzeptanzkriterien
presets-Tabelle hat Feldercontent_type+tape_mmPresetServiceimplementiert Validierung + CRUDGET /api/v1/presetslistet alle Presets (erfordertrequire_read)POST /api/v1/presetserstellt ein Preset (erfordertrequire_print)PUT /api/v1/presets/{id}aktualisiert ein Preset (erfordertrequire_print)DELETE /api/v1/presets/{id}löscht ein Preset (erfordertrequire_print)GET /api/v1/presets/{id}/preview.pngliefert Vorschau via LayoutEnginerequire_print, Readsrequire_readqr_three_linesReferenzen