fix(i-d): mail-API-Brueche behoben — signatures PATCH/DELETE + labels DELETE im Backend ergaenzt, drafts PATCH->PUT
Check Cross-Plugin Imports / check (push) Has been cancelled

Root-Cause: Frontend-Komponenten (SignatureManager, LabelManager) rufen Endpunkte auf die das Backend nie hatte (404/405 in Production). Anders als ai/sessions sind diese Funktionen ECHT in Komponenten eingebunden -> Backend-Routen nachbestellt statt Frontend-Calls zu loeschen:

(1) PATCH+DELETE /mail/signatures/{id}: MailSignatureUpdate-Schema neu, Tenant-Scoped + Owner-Check (403 bei fremder Signatur), is_default-Exklusivitaet beim Setzen. (2) DELETE /mail/labels/{id}: gleicher Stil. (3) updateDraft Frontend: apiPatch -> apiPut (Backend hat PUT /drafts/{id} bereits). Beweistest tests/test_mail_sig_label_routes.py 5/5 gruen (PATCH-Werte, DELETE+Liste-leer, 404-Faelle).

Verifikation: create_app registriert beide neuen Routen (563 total); ruff clean; tsc exit=0.
This commit is contained in:
Agent Zero
2026-08-25 20:13:40 +02:00
parent 3e5f13f516
commit 86c96f03ca
6 changed files with 230 additions and 218 deletions
+2 -2
View File
@@ -5,7 +5,7 @@
* Mail plugin routes under `/mail/...`.
*/
import { apiClient, apiDelete, apiGet, apiPatch, apiPost } from './client';
import { apiClient, apiDelete, apiGet, apiPatch, apiPost, apiPut } from './client';
// ─── Types ─────────────────────────────────────────────────────────────────
@@ -684,5 +684,5 @@ export function saveDraft(payload: MailDraftPayload): Promise<Mail> {
}
export function updateDraft(mailId: string, payload: MailDraftPayload): Promise<Mail> {
return apiPatch<Mail>(`/mail/drafts/${mailId}`, payload);
return apiPut<Mail>(`/mail/drafts/${mailId}`, payload);
}