-- 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;
