Stressfrei-Adressen: zusätzliche Weiterleitungsziele

Pro StressfreiEmail können jetzt weitere Weiterleitungs-Adressen
gepflegt werden, die zusätzlich zur Stamm-E-Mail des Kunden und
zur globalen Default-Forward-Adresse an den Provider gepusht werden.

- Schema: StressfreiEmail.additionalForwardingEmails (TEXT/JSON-
  Array), Migration mit IF NOT EXISTS.
- syncForwardingForEmail liest die Zusatzliste mit und filtert
  Duplikate gegen customer.email + config.defaultForwardEmail
  (case-insensitive) raus.
- Neuer Endpoint PUT /api/stressfrei-emails/:id/additional-forwards
  mit Body { emails: string[] } – ersetzt die Liste komplett und
  syncht den Provider direkt nach. Hard-Cap 20 Adressen, Format-
  Validation per Regex, Audit-Log.
- Frontend: Button "Weitere Weiterleitungen" im Edit-Modus des
  StressfreiEmailModals (erscheint sobald die Adresse beim Provider
  vorhanden ist). Sub-Modal mit Liste + Add/Remove, Änderungen
  gehen sofort live.
This commit is contained in:
2026-06-18 10:58:14 +02:00
parent 60851450f6
commit 36beac98c9
8 changed files with 363 additions and 8 deletions
+15
View File
@@ -97,6 +97,21 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🆕 Stressfrei-Wechseln-Adressen: zusätzliche Weiterleitungsziele**
- Neues Feld `StressfreiEmail.additionalForwardingEmails` (Text/
JSON-Array), Migration `20260608100000_stressfrei_email_additional_forwards`
mit `IF NOT EXISTS`.
- `syncForwardingForEmail` zieht die zusätzlichen Adressen mit
in die Plesk-`set:`-Liste ein (case-insensitive Dedup gegen
`customer.email` und `config.defaultForwardEmail`).
- Neuer Endpoint `PUT /api/stressfrei-emails/:id/additional-forwards`
mit Body `{ emails: string[] }` ersetzt die Liste und syncht
direkt mit dem Provider. Hard-Cap 20 Adressen, Format-Check per
Regex, Audit-Log.
- Im StressfreiEmailModal neuer „Weitere Weiterleitungen"-Button
(Edit-Modus + `providerStatus === exists`) öffnet ein Sub-Modal
mit Liste + Add/Remove. Jede Änderung geht sofort live.
- [x] **🐞 Modal-Felder ließen sich nicht editieren (Zähler/Bankkarte/Ausweis/Zählerstand)**
- Vier identische Vorkommen desselben Anti-Patterns wie beim
AddressModal-Fix von 2026-06-03: `setFormData(getInitialFormData())`