feat: Labels-Feature vollständig entfernen (PROJ-9)

Backend:
- internal/labelstore/ gelöscht (Store, Schema, CRUD)
- internal/api/label_handlers.go gelöscht (alle Label-Routen)
- internal/api/server.go: labels-Feld + SetLabels() entfernt
- internal/api/search_handlers.go: label_id-Filter + Enrichment entfernt
- internal/index/index.go: LabelID aus SearchRequest entfernt
- internal/imapserver/server.go: labels-Feld + labelbasierte Mailboxen entfernt
- cmd/archivmail/main.go: labelstore-Init + SetLabels() entfernt
- cmd/archivmail/version.go: labelstore-Modul entfernt, index-Kommentar korrigiert

Frontend:
- LabelList.tsx, LabelPicker.tsx, LabelsTab.tsx gelöscht
- src/lib/api/system.ts: MailLabel/LabelRule-Typen + alle Label-Funktionen entfernt
- src/lib/api/index.ts: Label-Exports entfernt
- src/app/search/page.tsx: LabelList + selectedLabelId State entfernt
- src/app/mail/[id]/page.tsx: LabelPicker + Labels-State entfernt
- src/app/admin/page.tsx: LabelsTab + alle Label-Handler/State entfernt

Docs:
- features/PROJ-9: Status auf Removed gesetzt
- features/INDEX.md: PROJ-9 auf Removed gesetzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
sysops
2026-04-04 21:32:13 +02:00
parent 4d1bdb6e8b
commit fdb25cb16a
19 changed files with 6 additions and 1954 deletions
+1 -51
View File
@@ -21,7 +21,6 @@ import (
"github.com/archivmail/config"
"github.com/archivmail/internal/audit"
"github.com/archivmail/internal/auth"
"github.com/archivmail/internal/labelstore"
"github.com/archivmail/internal/storage"
"github.com/archivmail/internal/userstore"
"github.com/archivmail/pkg/mailparser"
@@ -44,7 +43,6 @@ type Server struct {
cfg config.IMAPServerConfig
mailStore *storage.Store
users *userstore.Store
labels *labelstore.Store
audit *audit.Logger
authMgr *auth.Manager
logger *slog.Logger
@@ -66,7 +64,6 @@ func New(
cfg config.IMAPServerConfig,
mailStore *storage.Store,
users *userstore.Store,
labels *labelstore.Store,
auditLog *audit.Logger,
authMgr *auth.Manager,
logger *slog.Logger,
@@ -76,7 +73,6 @@ func New(
cfg: cfg,
mailStore: mailStore,
users: users,
labels: labels,
audit: auditLog,
authMgr: authMgr,
logger: logger,
@@ -428,20 +424,8 @@ func (sess *session) cmdList(tag string, args string) {
ref, pattern := parseListArgs(args)
_ = ref
// Build mailbox list: INBOX + label-based sub-folders
mailboxes := []string{"INBOX"}
if sess.tenantID != nil {
labels, err := sess.server.labels.GetLabelsForUser(
context.Background(), sess.userID, *sess.tenantID,
)
if err == nil {
for _, l := range labels {
mailboxes = append(mailboxes, "INBOX/"+l.Name)
}
}
}
for _, mbox := range mailboxes {
if matchMailbox(pattern, mbox) {
attrs := ""
@@ -728,47 +712,13 @@ func (sess *session) loadMailsForMailbox(mailbox string) ([]mailEntry, error) {
return nil, fmt.Errorf("load mails: %w", err)
}
// Label filter setup
var filterLabelID *int64
if strings.HasPrefix(mailbox, "INBOX/") {
labelName := strings.TrimPrefix(mailbox, "INBOX/")
if sess.tenantID != nil {
labels, err := sess.server.labels.GetLabelsForUser(ctx, sess.userID, *sess.tenantID)
if err == nil {
for _, l := range labels {
if l.Name == labelName {
lid := l.ID
filterLabelID = &lid
break
}
}
}
}
if filterLabelID == nil {
return nil, fmt.Errorf("label not found: %s", mailbox)
}
} else if mailbox != "INBOX" {
if mailbox != "INBOX" {
return nil, fmt.Errorf("unknown mailbox: %s", mailbox)
}
var labelEmailIDs map[string]bool
if filterLabelID != nil {
emailIDs, err := sess.server.labels.GetEmailIDsByLabel(ctx, *filterLabelID)
if err != nil {
return nil, fmt.Errorf("load label emails: %w", err)
}
labelEmailIDs = make(map[string]bool, len(emailIDs))
for _, eid := range emailIDs {
labelEmailIDs[eid] = true
}
}
var entries []mailEntry
var seqNum uint32 = 1
for _, m := range rawMails {
if labelEmailIDs != nil && !labelEmailIDs[m.ID] {
continue
}
uid := uint32(m.UID)
if uid == 0 {
uid = seqNum // fallback if no UID in DB yet