docs(PROJ-70): Implementation Notes für Frontend ergänzen

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sysops
2026-07-07 00:43:53 +02:00
co-authored by Claude Sonnet 5
parent 4b3a4ef996
commit ba0c519b00
@@ -110,13 +110,31 @@ Mail- und IMAP-Handler dupliziert):
Versuch (Erfolg und Fehlschlag) inkl. Mail-ID.
- Kein Schreibzugriff auf `internal/imapserver` (Archiv-Server) — nur lesendes
`storage.Load()` plus schreibender Client gegen das externe Postfach.
- **Offen (Frontend, noch nicht umgesetzt):** Schieberegler + Passwort-Dialog für
Opt-in, Restore-Button in `/mail/[id]`, Auswahl des Ziel-IMAP-Kontos falls
mehrere hinterlegt sind. `GET /api/auth/me` liefert bereits `imap_restore_enabled`
im Response (siehe `auth_handlers.go`), Frontend kann das für Sichtbarkeit nutzen.
- Nicht lokal kompilierbar/testbar (kein Go-Toolchain lokal) — Verifikation von
`go vet`/Kompilierung steht auf Test-Server (132) noch aus.
**Frontend (Commit 4b3a4ef):**
- `src/hooks/useImapRestore.ts` (neu): State-Hook für den Opt-in-Schalter —
AN löst Passwort-Dialog aus, AUS deaktiviert direkt ohne Passwort; Regler
springt bei Fehler (falsches Passwort, LDAP-Account) auf AUS zurück.
- `src/components/settings/ImapRestoreSection.tsx` (neu): shadcn `Switch` +
`Dialog` mit Passwortfeld, Loading/Error/Success-States. Eingebunden in
`src/app/settings/page.tsx`, `onChanged` triggert `useAuth().refresh()`.
- `src/components/mail/RestoreMailButton.tsx` (neu): Button "Zurück ins
Postfach" in `src/app/mail/[id]/page.tsx` — nur sichtbar bei
`imap_restore_enabled=true` und ≥1 IMAP-Konto; bei mehreren Konten `Select`
zur Zielwahl; zeigt die 422-Klartextfehlermeldung vom Server per shadcn
`Alert` (kein Toast-System im Repo vorhanden).
- `src/lib/api/users.ts`: `MeResponse.imap_restore_enabled?: boolean`, neue
`setImapRestore()`.
- `src/lib/api/mail.ts`: `RestoreResult`-Interface + `restoreMail()` (eigener
`fetch`, um das `error`-JSON-Feld als `Error.message` durchzureichen).
- `npx tsc --noEmit -p .` lief sauber durch (Exit 0).
**Noch offen:** QA gegen Acceptance Criteria (insb. Tenant-Isolation-Test,
Sichtbarkeits-Gating), Kompilierung/Deploy auf 132.
## QA Test Results
_wird nach Umsetzung ergänzt._