feat(api): IMAP Client — MS1 Backend vollständig (#101–#107) #127

Merged
admin-mrrm merged 6 commits from feat/app-navigation-auth into main 2026-04-27 11:27:02 +02:00
Owner

Summary

  • EncryptionService (AES-256-GCM): Passwörter/App-Tokens verschlüsselt in DB, Secret aus ENV (#104)
  • ImapService + : typsicherer imap-simple Wrapper (#102)
  • Drizzle-Schema + Migration: mail_accounts, mail_folders, mail_messages_cache (#103)
  • Mail-Accounts CRUD: POST/GET/DELETE /mail/accounts + Verbindungstest vor dem Speichern, 422 bei Fehlschlag (#105)
  • Ordner & Nachrichten-Liste: GET /mail/accounts/:id/folders und /folders/:folder/messages mit Pagination (page/limit/since) (#106)
  • Einzel-Mail: GET /mail/accounts/:id/folders/:folder/messages/:uid — struct-basierter MIME-Parser für text/plain + text/html, Write-through Cache (#107)

Test plan

  • 83 Unit-Tests — alle grün
  • TypeScript-Typecheck fehlerfrei
  • TDD durchgehend: Rot → Grün für jeden Service und Controller

🤖 Generated with Claude Code

## Summary - **EncryptionService** (AES-256-GCM): Passwörter/App-Tokens verschlüsselt in DB, Secret aus ENV (#104) - **ImapService** + : typsicherer imap-simple Wrapper (#102) - **Drizzle-Schema** + Migration: `mail_accounts`, `mail_folders`, `mail_messages_cache` (#103) - **Mail-Accounts CRUD**: `POST/GET/DELETE /mail/accounts` + Verbindungstest vor dem Speichern, 422 bei Fehlschlag (#105) - **Ordner & Nachrichten-Liste**: `GET /mail/accounts/:id/folders` und `/folders/:folder/messages` mit Pagination (page/limit/since) (#106) - **Einzel-Mail**: `GET /mail/accounts/:id/folders/:folder/messages/:uid` — struct-basierter MIME-Parser für text/plain + text/html, Write-through Cache (#107) ## Test plan - [x] 83 Unit-Tests — alle grün - [x] TypeScript-Typecheck fehlerfrei - [x] TDD durchgehend: Rot → Grün für jeden Service und Controller 🤖 Generated with [Claude Code](https://claude.com/claude-code)
- EncryptionService: AES-256-GCM, Secret aus ENV (9 Tests)
- ImapService + ImapConnectionException: imap-simple Wrapper (6 Tests)
- Drizzle-Schema: mail_accounts, mail_folders, mail_messages_cache
- MailAccountsService: CRUD + Verbindungstest, Passwort verschlüsselt (14 Tests)
- MailAccountsController: POST/GET/DELETE /mail/accounts + POST /mail/accounts/:id/test (10 Tests)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Generiert aus dem mail.schema — legt mail_accounts, mail_folders und
mail_messages_cache mit Indexes und FK-Constraints an.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- getFolders: Ordner live vom IMAP-Server, flache Liste mit Pfaden (5 Tests)
- getMessages: Envelope-only, UID-sortiert absteigend, page/limit/since (10 Tests)
- withConnection-Helper: Account laden, entschlüsseln, verbinden, aufräumen
- GET /mail/accounts/:id/folders + /:id/folders/:folder/messages (5 Tests)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat(api): IMAP Einzel-Mail mit Cache (#107)
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
af39b6f205
- getMessage: struct-basierter MIME-Parser für text/plain + text/html
- Write-through Cache: Folder-Upsert in mail_folders, Message-Insert in mail_messages_cache
- Cache-Hit: kein IMAP-Call, direkt aus DB zurück
- GET /mail/accounts/:id/folders/:folder/messages/:uid (14 Tests)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(api): lint-Fehler in Spec-Dateien beheben — as any durch korrekte Typen ersetzen
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is passing
af9dec233d
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
admin-mrrm deleted branch feat/app-navigation-auth 2026-04-27 11:27:02 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!127
No description provided.