From 8d29dbd1267a04e4d02067ba9986e13ad0cd1a0a Mon Sep 17 00:00:00 2001 From: killerprojecte Date: Mon, 22 Jun 2026 14:11:11 +0800 Subject: [PATCH] chore: improve label status handling --- apps/api/internal/app/mail_handlers.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/api/internal/app/mail_handlers.go b/apps/api/internal/app/mail_handlers.go index d3ff4a1..f219d78 100644 --- a/apps/api/internal/app/mail_handlers.go +++ b/apps/api/internal/app/mail_handlers.go @@ -228,11 +228,15 @@ func (a *App) handleDeleteMailLabel(w http.ResponseWriter, r *http.Request) { return } ctx := r.Context() - tx, err := a.db.BeginTx(ctx, nil) - if err != nil { - respondError(w, http.StatusInternalServerError, "failed to begin transaction") + if !a.labelBelongsToMailbox(ctx, labelID, mb.ID) { + respondError(w, http.StatusNotFound, "label not found") return } + tx, err := a.db.BeginTx(ctx, nil) + if (_, err := tx.ExecContext(ctx, "DELETE FROM message_labels WHERE label_id = ? AND EXISTS (SELECT 1 FROM mail_labels WHERE id = ? AND mailbox_id = ?)", labelID, labelID, mb.ID); err != nil { + respondError(w, http.StatusInternalServerError, "failed to remove label associations") + return + } defer tx.Rollback() if _, err := tx.ExecContext(ctx, `DELETE FROM message_labels WHERE label_id=?`, labelID); err != nil { respondError(w, http.StatusInternalServerError, "failed to remove label associations")