-- PROJ: Gespeicherte Suchansichten (SavedViews, Paperless-ngx inspiriert) -- Doku-only (siehe README.md in diesem Verzeichnis) — die tatsächliche -- Ausführung passiert idempotent über -- internal/storage/saved_views.go initSavedViewsSchema(), aufgerufen aus -- (*Store).initSchema() NACH initDocumentNotesSchema. -- -- Nutzer speichern ihre aktuelle Such-/Filter-Query als benannte, -- wiederverwendbare Ansicht. filters ist die serialisierte index.SearchQuery -- (JSONB, 1:1 wieder einlesbar). Eine Ansicht ist privat für ihren Ersteller, -- außer is_shared=true -> tenant-weit sichtbar, aber weiterhin nur vom -- Ersteller änderbar/löschbar (WHERE id + tenant_id + user_id). Create/Update/ -- Delete werden im Audit-Log protokolliert (Nachvollziehbarkeit). CREATE TABLE IF NOT EXISTS saved_views ( id BIGSERIAL PRIMARY KEY, tenant_id BIGINT NOT NULL, user_id BIGINT NOT NULL, name TEXT NOT NULL, filters JSONB NOT NULL, is_shared BOOLEAN NOT NULL DEFAULT false, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_saved_views_tenant_user ON saved_views (tenant_id, user_id); CREATE INDEX IF NOT EXISTS idx_saved_views_tenant_shared ON saved_views (tenant_id, is_shared) WHERE is_shared;