feat(demo): Mail-Benachrichtigungen bei Demo-Ablauf

Neue Mail-Templates (lib/mail.js):
- sendDemoExpiryReminderMail: 7 Tage vor Ablauf
- sendDemoLastDayMail: 1 Tag vor Ablauf (Letzter-Tag-Reminder)
- sendDemoExpiredMail: am Ablauftag (setzt Tenant-Status abgelaufen)

Cron-Job (lib/expiryJob.js):
- node-cron taeglich 08:00 UTC (anpassbar via CRON_EXPIRY_AT)
- 3 Windows pruefen, idempotent ueber notified_*_at Timestamp-Spalten
- BETWEEN-Fenster [n-1, n] Tage fuer Robustheit

DB-Migration (bootstrap.js):
- Beim Backend-Start automatisches ALTER TABLE fuer
  notified_7d_at, notified_1d_at, notified_expired_at (idempotent)

Manueller Test: docker exec pfandsystem-demo-backend node -e "
  import(\"./lib/expiryJob.js\").then(m => m.runExpiryCheck())"
This commit is contained in:
christian
2026-05-26 15:59:25 +00:00
parent d9c10211d8
commit 3228fe4ab3
5 changed files with 218 additions and 33 deletions

View File

@@ -2,7 +2,7 @@
"name": "pfandsystem-backend",
"version": "1.0.0",
"type": "module",
"description": "Backend API für Pfandsystem mit MySQL",
"description": "Backend API f\u00fcr Pfandsystem mit MySQL",
"main": "server.js",
"scripts": {
"start": "node server.js",
@@ -18,9 +18,10 @@
"multer": "^1.4.5-lts.1",
"nodemailer": "^6.9.16",
"resend": "^3.0.0",
"express-validator": "^7.0.1"
"express-validator": "^7.0.1",
"node-cron": "^3.0.3"
},
"devDependencies": {
"nodemon": "^3.0.2"
}
}
}