docs: correct mail design spec after deeper env/infra investigation
.env already exists locally with valid creds (the deleted repo-root .env was an unused duplicate), and no MailDev infra exists for the e2e mail tests, so the plan shifts to a MailService unit test plus one manual send instead of touching .env or standing up e2e infra.
This commit is contained in:
@@ -9,15 +9,19 @@ Backend: NestJS (`myteamwallet_backend`), basierend auf `nestjs-boilerplate`. Ma
|
|||||||
`@nestjs-modules/mailer` (Nodemailer) mit Handlebars-Templates. E-Mails werden für zwei Flows
|
`@nestjs-modules/mailer` (Nodemailer) mit Handlebars-Templates. E-Mails werden für zwei Flows
|
||||||
verschickt: Registrierung (Bestätigungsmail) und Passwort vergessen.
|
verschickt: Registrierung (Bestätigungsmail) und Passwort vergessen.
|
||||||
|
|
||||||
Der Mailversand funktioniert aktuell nicht, aus zwei unabhängigen Gründen:
|
Der Mailversand funktioniert aktuell nicht. Ursache (nach genauerer Prüfung — korrigiert
|
||||||
|
gegenüber einer ersten Analyse):
|
||||||
|
|
||||||
1. `src/mail/mail.service.ts` — sowohl `userSignUp()` als auch `forgotPassword()` haben ein
|
- `src/mail/mail.service.ts` — sowohl `userSignUp()` als auch `forgotPassword()` haben ein
|
||||||
totes `return;` als erste Anweisung, noch vor dem eigentlichen `mailerService.sendMail(...)`
|
totes `return;` als erste Anweisung, noch vor dem eigentlichen `mailerService.sendMail(...)`
|
||||||
Aufruf. Der Versand-Code wird nie erreicht.
|
Aufruf. Der Versand-Code wird nie erreicht. **Das ist die alleinige Ursache.**
|
||||||
2. `.env` existiert lokal nicht mehr im Arbeitsverzeichnis (im Commit `1d4546d "styling"` wurde
|
|
||||||
die Datei korrekt aus dem Git-Tracking entfernt und zu `.gitignore` hinzugefügt — das war
|
Korrektur: die im Repo-Root gelöschte `.env` (Commit `1d4546d "styling"`, korrekt aus dem
|
||||||
bereits vor diesem Spec erledigt). Ohne `.env` sind alle `MAIL_*`/`DATABASE_*`/etc.
|
Git-Tracking entfernt und zu `.gitignore` hinzugefügt) ist eine andere, von der App nicht
|
||||||
Umgebungsvariablen `undefined`, die App kann so nicht sinnvoll laufen.
|
genutzte Datei. Die tatsächlich verwendete `myteamwallet_backend/.env` (das Arbeitsverzeichnis
|
||||||
|
der NestJS-App) existiert bereits lokal, ist bereits in `myteamwallet_backend/.gitignore`
|
||||||
|
ausgeschlossen und enthält bereits gültige `MAIL_*`/`DATABASE_*` Werte (Strato-SMTP,
|
||||||
|
lokale MySQL-Instanz läuft). Es ist **keine Aktion an `.env` nötig.**
|
||||||
|
|
||||||
Zusätzlich bestehende Baustellen, die in diesem Zug mit erledigt werden:
|
Zusätzlich bestehende Baustellen, die in diesem Zug mit erledigt werden:
|
||||||
|
|
||||||
@@ -36,8 +40,11 @@ Wordmark-Schreibweise „TeamWallet".
|
|||||||
|
|
||||||
## Entscheidungen aus dem Brainstorming
|
## Entscheidungen aus dem Brainstorming
|
||||||
|
|
||||||
- **SMTP-Zugangsdaten**: das alte, aus der Git-Historie wiederhergestellte Strato-Passwort wird
|
- **SMTP-Zugangsdaten**: bleiben unangetastet — `myteamwallet_backend/.env` existiert bereits
|
||||||
vorerst weiterverwendet (keine sofortige Rotation im Rahmen dieser Änderung).
|
lokal mit gültigen Strato-Werten (keine Rotation im Rahmen dieser Änderung).
|
||||||
|
- **Testing-Infrastruktur**: kein lokaler MailDev-Container/e2e-Aufbau in diesem Zug (siehe
|
||||||
|
Testing-Abschnitt) — Unit-Test + einmalige manuelle Verifikation mit echtem Versand
|
||||||
|
stattdessen.
|
||||||
- **Sprachen**: nur Deutsch. Keine mehrsprachige i18n-Infrastruktur für Mails.
|
- **Sprachen**: nur Deutsch. Keine mehrsprachige i18n-Infrastruktur für Mails.
|
||||||
- **i18n-Mechanismus**: kein Sprachdatei-System — deutsche Texte direkt im Code/Template.
|
- **i18n-Mechanismus**: kein Sprachdatei-System — deutsche Texte direkt im Code/Template.
|
||||||
`nestjs-i18n` wird komplett entfernt (Modul-Registrierung, `src/i18n/`, Dependency,
|
`nestjs-i18n` wird komplett entfernt (Modul-Registrierung, `src/i18n/`, Dependency,
|
||||||
@@ -102,12 +109,10 @@ Wordmark-Schreibweise „TeamWallet".
|
|||||||
`firstName`, `url`, ggf. `year` fürs Footer-Copyright — Rest (Texte, Button-Label, Titel) fest
|
`firstName`, `url`, ggf. `year` fürs Footer-Copyright — Rest (Texte, Button-Label, Titel) fest
|
||||||
im Template.
|
im Template.
|
||||||
|
|
||||||
### 5. `.env` wiederherstellen
|
### 5. `.env`
|
||||||
|
|
||||||
- Lokale, nicht getrackte `.env` Datei neu anlegen (Datei existiert nicht mehr im Working Tree,
|
Keine Aktion nötig — `myteamwallet_backend/.env` existiert bereits lokal mit gültigen Werten
|
||||||
ist aber in `.gitignore`) mit den aus `git show 7df5611:.env` wiederhergestellten Werten
|
(siehe Kontext oben).
|
||||||
(DB-, Mail-, JWT- und App-Konfiguration wie zuvor).
|
|
||||||
- Kein Commit dieser Datei — bleibt lokal/untracked, wie vom User entschieden.
|
|
||||||
|
|
||||||
## Fehlerbehandlung
|
## Fehlerbehandlung
|
||||||
|
|
||||||
@@ -119,14 +124,27 @@ Wordmark-Schreibweise „TeamWallet".
|
|||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
- Bestehenden e2e-Test `test/user/auth.e2e-spec.ts` (Confirm-Email-Flow über MailDev-artige
|
Korrektur gegenüber einer ersten Analyse: der bestehende e2e-Test
|
||||||
HTTP-Inbox-API) laufen lassen und verifizieren, dass er jetzt grün ist (war zuvor durch den
|
`test/user/auth.e2e-spec.ts` ("Confirm email") pollt eine MailDev-HTTP-Inbox-API
|
||||||
Bug automatisch rot).
|
(`MAIL_HOST:MAIL_CLIENT_PORT`). Dafür existiert im Repo keine Infrastruktur (kein
|
||||||
- Neuer e2e-Test für den Forgot-Password-Mail-Flow, analog zum bestehenden Confirm-Email-Test:
|
`docker-compose.yml`, kein MailDev-Container), und die echte `.env` zeigt auf produktives
|
||||||
Passwort-vergessen anfragen, Mail über MailDev-Inbox abrufen, Hash extrahieren, gegen
|
Strato-SMTP statt auf eine lokale Test-Mailbox — dieser Test kann unabhängig vom Bugfix nicht
|
||||||
`/api/v1/auth/reset/password` verifizieren.
|
grün werden, ohne separate Test-Infrastruktur aufzusetzen. Entscheidung: kein MailDev-Aufbau in
|
||||||
- Kein Unit-Test-Aufbau für `MailService` vorgesehen (kein bestehendes Muster im Repo für
|
diesem Zug (zu viel Zusatzaufwand für den aktuellen Scope).
|
||||||
Mail-Unit-Tests, e2e deckt das Verhalten ausreichend ab) — YAGNI.
|
|
||||||
|
Stattdessen:
|
||||||
|
|
||||||
|
- Neuer Jest Unit-Test für `MailService` (gemockter `MailerService`/`ConfigService`), der
|
||||||
|
verifiziert, dass `userSignUp()` und `forgotPassword()` `sendMail(...)` mit den erwarteten
|
||||||
|
Parametern (`to`, `subject`, `template`, `context`) aufrufen. Dieser Test hätte den
|
||||||
|
`return;`-Bug erkannt und ist die primäre automatisierte Regression-Absicherung.
|
||||||
|
- Manuelle Verifikation: Backend lokal starten (bestehende `.env`, laufende lokale MySQL-Instanz
|
||||||
|
vorhanden), einmal Registrierung und einmal Passwort-vergessen über die echten Endpunkte
|
||||||
|
auslösen und den tatsächlichen Mailversand über Strato-SMTP mit einer echten Test-Mailadresse
|
||||||
|
prüfen.
|
||||||
|
- Der bestehende e2e-Test bleibt unverändert im Repo (nicht Teil dieses Scopes, weiterhin ohne
|
||||||
|
lokale MailDev-Instanz nicht lauffähig — vorbestehende Einschränkung, nicht durch diese Änderung
|
||||||
|
verursacht). Kein neuer e2e-Test für forgot-password (gleiche Infrastruktur-Einschränkung).
|
||||||
|
|
||||||
## Out of Scope
|
## Out of Scope
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user