-- Migrasjon 011: Fulltekstsøk for publiserte artikler
--
-- Legger til tsvector-kolonne på nodes-tabellen og GIN-indeks
-- for effektivt fulltekstsøk i publisert innhold.
-- Brukes av dynamiske søkesider i publiseringssystemet.

-- tsvector-kolonne som oppdateres automatisk via trigger
ALTER TABLE nodes ADD COLUMN IF NOT EXISTS search_vector tsvector;

-- GIN-indeks for rask fulltekstsøk
CREATE INDEX IF NOT EXISTS idx_nodes_search_vector ON nodes USING GIN (search_vector);

-- Trigger-funksjon som oppdaterer search_vector ved insert/update
CREATE OR REPLACE FUNCTION update_search_vector() RETURNS trigger AS $$
BEGIN
    NEW.search_vector :=
        setweight(to_tsvector('norwegian', COALESCE(NEW.title, '')), 'A') ||
        setweight(to_tsvector('norwegian', COALESCE(NEW.content, '')), 'B');
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Trigger på nodes-tabellen
DROP TRIGGER IF EXISTS trg_nodes_search_vector ON nodes;
CREATE TRIGGER trg_nodes_search_vector
    BEFORE INSERT OR UPDATE OF title, content ON nodes
    FOR EACH ROW
    EXECUTE FUNCTION update_search_vector();

-- Populer eksisterende noder
UPDATE nodes SET search_vector =
    setweight(to_tsvector('norwegian', COALESCE(title, '')), 'A') ||
    setweight(to_tsvector('norwegian', COALESCE(content, '')), 'B')
WHERE search_vector IS NULL;
