QR-Link-Templates
Zweck
QrLinkTemplate modelliert wiederverwendbare Style-Vorlagen für QR-Links. Statt für jeden neuen Link Punkte, Ecken, Farben, Hintergrund und Logo-Größe einzeln zu pflegen, lässt sich ein Template einmal definieren und anschließend per Klick auf einen QR-Link anwenden.
Zwei Scopes sind möglich:
| Scope | Sichtbar für | Use-Case |
|---|---|---|
private | nur den Ersteller (ownerEmployeeId) | Persönliche Style-Experimente, Entwurfs-Templates |
tenant | alle Mitarbeiter des Mandanten | Corporate Templates (Sommer-Kampagne, Standard-Logo-Variante) |
Voraussetzungen
Berechtigungen (CASL)
| Action | Subject | Wirkung |
|---|---|---|
view | QrLinkTemplate | Liste + Detail aufrufbar (Scope-Filter greift) |
create | QrLinkTemplate | Neues Template anlegen |
update | QrLinkTemplate | Felder + Style ändern |
delete | QrLinkTemplate | Soft-Delete; bestehende QR-Links behalten ihren Style (Snapshot im styleJson) |
Der Scope-Filter läuft im Backend über die restrictTemplatesToOwnOrTenant()-Middleware:
sichtbar wenn:
scope = 'tenant'
OR
scope = 'private' AND ownerEmployeeId = currentEmployee
Datenmodell
| Feld | Pflicht | Typ | Wirkung |
|---|---|---|---|
name | ja | String (255) | Anzeigename im Picker |
description | nein | TEXT | Erläuterung (z. B. „Brand-konform 2026 – mit Sommer-Logo") |
scope | ja | ENUM (private, tenant) | Sichtbarkeits-Bereich. Default: private. |
ownerEmployeeId | auto | UUID → Employee | Ersteller — auch bei tenant-Templates als Audit-Spur |
styleJson | ja | JSON (QrStyleConfig) | Vollständiger Style-Block, identisch zum QR-Link-Modul |
sequenceId | auto | Integer | Lesbare Nummer |
createdAt, updatedAt, deletedAt | auto | DateTime | Standard + Soft-Delete |
Schritt-für-Schritt-Anleitung
Template aus einem QR-Link erstellen
Das Modul-Detail eines QR-Links bietet keinen direkten „Als Template speichern"-Button — Anlage läuft separat:
- QR-Link-Templates (
/qr-link-templates) öffnen → + Hinzufügen. - Name und ggf. Beschreibung pflegen.
- Scope wählen —
privatefür persönliche Tests,tenantfür Corporate-Templates (Achtung: einmaltenant, sehen alle Mitarbeiter das Template). - Style-Felder pflegen (identisch zum QR-Link-Editor — Punkt-/Eck-Stil, Farben, Hintergrund, Logo-Anteil).
- Speichern → Template steht im QR-Link-Editor unter Template anwenden zur Auswahl.
Template in einem QR-Link anwenden
- Im QR-Link-Editor das Dropdown Template öffnen.
- Gewünschtes Template wählen → Anwenden klicken.
- Style-Felder werden aus dem Template übernommen,
templateIdwird zur Audit-Referenz gespeichert. - Änderungen am QR-Link betreffen nur diesen Link — das Template bleibt unverändert.
Template ändern
Update eines Templates hat keinen Effekt auf bereits angewandte QR-Links — diese halten ihren eigenen styleJson-Snapshot. Neu angelegte QR-Links erben hingegen den neuen Style.
Verknüpfungen zu anderen Modulen
- QR-Links — Hauptanwendungsfall, Template wird im Editor angewandt.
- QR-Link-Tracking — Konzeptseite zum gesamten Tracking-Modell.
- Mitarbeiter —
ownerEmployeeId.
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/qr-link-templates | Liste (Scope-Filter automatisch) | view QrLinkTemplate |
POST | /api/qr-link-templates | Anlegen | create QrLinkTemplate |
GET | /api/qr-link-templates/:id | Detail | view QrLinkTemplate |
PATCH | /api/qr-link-templates/:id | Update | update QrLinkTemplate |
DELETE | /api/qr-link-templates/:id | Soft-Delete | delete QrLinkTemplate |
Häufige Fehler und Lösungen
| Fehler | Lösung |
|---|---|
| Template fehlt im Picker | Scope ist private und der Ersteller ist nicht der aktuelle User. Owner umstellen oder Scope auf tenant setzen (Achtung: Sichtbarkeit für alle). |
| Template ändert vorhandene QR-Links nicht | Korrekt — das styleJson wird als Snapshot in den QR-Link kopiert. Template-Updates wirken nur auf neue Anwendungen. |
| Soft-Delete entfernt das Template aus dem Picker | Korrekt. Bestehende QR-Links bleiben unberührt (Snapshot). |
Versionshinweise
- 2026-05-20 (Welle 130): Initiale Veröffentlichung. Quelle: BE-Modell
qrLinkTemplate.model.ts, RouterqrLinkTemplate.router.ts(157 Z.), Migration20260519110004-initial-qr-link-template-model.js. Scope-Constraint viarestrictTemplatesToOwnOrTenant()-Middleware.