43c75e5dd34366e7f20842f368f5c7af2e483af1
Middleware:
- requireTenant prueft tenant_id, Status und Demo-Ablauf (autom. Status-Update)
- requireSuperAdmin fuer cross-tenant Endpoints
- JWT enthaelt jetzt tenant_id
Auth:
- Login: SuperAdmin (tenant_id=NULL) ODER tenant-scoped User
- Demo-Ablaufs-Check beim Login
Neue Routes:
- /api/tenants (SuperAdmin: Demo-Accounts anlegen mit 30-Tage-Default,
Mail-Invite via Resend, Sample-Daten-Seed automatisch,
verlaengern, deaktivieren)
- /api/geraete (Seriennummern-Verwaltung mit Kunde-Zuordnung)
- /api/kunden-bilder/:kunde_id (Foto-Upload, max 5/Kunde)
Bestehende Routes:
- alle tenant_id-scoped (SELECT/UPDATE/DELETE)
- kunden: anlieferungshinweis + lieferzeit_bis Felder
- Cross-tenant-Refs (kunde_id/artikel_id) werden gegen Tenant validiert
Lib:
- lib/mail.js (Resend, mit Dev-Fallback)
- lib/seed.js (5 Kunden, 3 Artikel, 6 Lieferungen, 2 Geraete)
- scripts/bootstrap.js (legt SuperAdmin aus env-Vars beim Start an)
server.js: neue Routes + bootstrap-Call
Pfandsystem Demo (Whitelabel)
Whitelabel-Demo des Pfandsystems mit Multi-Tenant-Verwaltung für 30-Tage Demo-Accounts. Basis: borbaecker-pfand.dockly.de — neu aufgesetzt mit Tailwind-UI, ohne Branding.
- Domain: pfandsystem.dockly.de
- Server: 51.15.249.253 (Scaleway, borbaecker-pfand.dockly.de Instanz)
- Pfad auf Server:
/root/pfandsystem-demo - Gitea:
ssh://git@49.13.154.75:2244/christian/pfandsystem-demo.git
Architektur
- Frontend: React 18 + Vite + Tailwind, PWA-fähig
- Backend: Node.js (Express) + MySQL 8 + JWT
- Reverse-Proxy: Traefik v3 (geteilt mit borbaecker + pfandsystem-dev)
- Container:
pfandsystem-demo-{mysql,phpmyadmin,backend,frontend} - Ports (alle 127.0.0.1): MySQL 3308, phpMyAdmin 8083, Backend 3003
Multi-Tenant-Modell
Eine MySQL-DB, jede Datentabelle hat eine tenant_id. Mitarbeiter sind
einem Tenant zugeordnet — Ausnahme: rolle='superadmin' mit tenant_id=NULL,
darf neue Demo-Tenants anlegen.
Demo-Tenants haben typ='demo' + demo_expires_at (default +30 Tage).
Nach Ablauf wird status='abgelaufen' gesetzt (Cron).
Erweiterungen (Iteration 1)
- Kundenbilder & Anlieferungshinweise —
kunden_bilder-Tabelle +kunden.anlieferungshinweis - Seriennummern-Verwaltung —
geraete-Tabelle (Typ, SN, Status, Kunde-Zuordnung) - Tourenplanung Stufe 1 — Navi-Button (Maps-Link),
kunden.lieferzeit_bis
BBN-Schnittstelle vorerst nicht enthalten (klärungsbedürftig).
Deployment
ssh -i ~/.ssh/id_rsa root@51.15.249.253
cd /root/pfandsystem-demo
cp .env.example .env # Werte setzen!
docker-compose up -d --build
# Traefik in das Netzwerk joinen (einmalig):
docker network connect pfandsystem-demo_pfandsystem-demo-net pfandsystem-traefik
Description
Languages
JavaScript
95.7%
Shell
2.2%
CSS
1.2%
Dockerfile
0.5%
HTML
0.4%