-- A/B-testing: impression/click-logging for presentasjonselement-varianter. -- -- Når en artikkel har flere varianter av tittel/summary/og_image-noder, -- roterer maskinrommet mellom dem på forsiden og logger visninger/klikk. -- Etter statistisk signifikans markeres vinneren i edge-metadata. -- -- Ref: docs/concepts/publisering.md § "Automatisk A/B-testing" -- Oppgave: 14.17 -- Event-logg: hvert impression/klikk logges individuelt for tid-normalisering. CREATE TABLE ab_events ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), edge_id UUID NOT NULL, article_id UUID NOT NULL, collection_id UUID NOT NULL, event_type VARCHAR(16) NOT NULL CHECK (event_type IN ('impression', 'click')), -- Timens posisjon i uken (0-167) for tidspunkt-normalisering. -- Mandag 00:00 = 0, søndag 23:00 = 167. hour_of_week SMALLINT NOT NULL DEFAULT ( EXTRACT(ISODOW FROM now())::int * 24 - 24 + EXTRACT(HOUR FROM now())::int ), created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- Primær-oppslag: alle events for en bestemt edge CREATE INDEX idx_ab_events_edge ON ab_events(edge_id, event_type); -- Opprydning/aggregering per samling CREATE INDEX idx_ab_events_collection ON ab_events(collection_id, created_at); -- For periodisk evaluering: finn alle aktive tester per samling CREATE INDEX idx_ab_events_article ON ab_events(article_id, edge_id); COMMENT ON TABLE ab_events IS 'A/B-test impression/klikk-logg for presentasjonselement-varianter'; COMMENT ON COLUMN ab_events.hour_of_week IS 'Timens posisjon i uken (0-167) for CTR-normalisering mot tidspunkt-baseline';