feat(#279): REST-Endpoint Mail archivieren + archived-Indikator #313

Merged
admin-mrrm merged 1 commit from feat/279-mail-archive-endpoint into main 2026-05-16 15:52:05 +02:00
Owner

Summary

Schließt die API-Foundation des Paperless-Archivs (#279, Phase A) ab.

Neuer Endpoint:

POST /mail/accounts/:id/folders/:folder/messages/:uid/archive
→ 200 { paperlessDocumentId, archivedAt, alreadyArchived }

Delegiert an MailArchiveService.archive (aus #278). Idempotenz wird vom Service garantiert: zweiter Aufruf liefert alreadyArchived=true und die bestehende Document-ID ohne erneuten Paperless-Upload.

Indikator im Mail-Listing:
MailAccountsService.getMessages und getMessage liefern jetzt archived: boolean pro Mail. Lookup erfolgt als Batch-Query auf mail_archive_link (eine SQL-Query pro Page mit IN (uids…)) — keine N+1.

Tests: 333 grün gesamt (+5 für getMessages → archived-Flag, +3 für Controller).

Test plan

  • CI grün
  • Manueller Smoketest nach Deploy:
    • POST /mail/accounts/<id>/folders/INBOX/messages/<uid>/archive → 200 mit alreadyArchived=false
    • Gleicher Call nochmal → alreadyArchived=true, gleiche paperlessDocumentId
    • GET /mail/accounts/<id>/folders/INBOX/messages?… → Liste enthält archived: true für die archivierte UID
## Summary Schließt die API-Foundation des Paperless-Archivs (#279, Phase A) ab. **Neuer Endpoint:** ``` POST /mail/accounts/:id/folders/:folder/messages/:uid/archive → 200 { paperlessDocumentId, archivedAt, alreadyArchived } ``` Delegiert an `MailArchiveService.archive` (aus #278). Idempotenz wird vom Service garantiert: zweiter Aufruf liefert `alreadyArchived=true` und die bestehende Document-ID ohne erneuten Paperless-Upload. **Indikator im Mail-Listing:** `MailAccountsService.getMessages` und `getMessage` liefern jetzt `archived: boolean` pro Mail. Lookup erfolgt als **Batch-Query** auf `mail_archive_link` (eine SQL-Query pro Page mit `IN (uids…)`) — keine N+1. **Tests:** 333 grün gesamt (+5 für `getMessages → archived-Flag`, +3 für Controller). ## Test plan - [ ] CI grün - [ ] Manueller Smoketest nach Deploy: - `POST /mail/accounts/<id>/folders/INBOX/messages/<uid>/archive` → 200 mit `alreadyArchived=false` - Gleicher Call nochmal → `alreadyArchived=true`, gleiche `paperlessDocumentId` - `GET /mail/accounts/<id>/folders/INBOX/messages?…` → Liste enthält `archived: true` für die archivierte UID
feat(#279): REST-Endpoint Mail archivieren + archived-Indikator
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
81cbad5047
Neuer MailArchiveController delegiert auf MailArchiveService aus
#278:

  POST /mail/accounts/:id/folders/:folder/messages/:uid/archive
  → { paperlessDocumentId, archivedAt, alreadyArchived }

Idempotenz wird vom Service garantiert (mail_archive_link); ein
zweiter Aufruf liefert alreadyArchived=true ohne erneutes Upload.

MailAccountsService.getMessages und getMessage liefern jetzt
zusätzlich `archived: boolean` pro Mail. Lookup als Batch-Query
über mail_archive_link für die aktuelle Page — keine N+1.

Tests: 333 grün (+5 getMessages-archived, +3 controller).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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!313
No description provided.