MBO-Tech-IT-Webseite/modules/03-analytics/migrations/MIGRATIONS_PAGE_VIEWS.sql

37 lines
1.8 KiB
SQL

-- Migration: Erstelle page_views Tabelle für Web-Analytics
-- Datum: 2026-04-17
-- Zweck: Protokollierung von Seitenaufrufen, Verweildauer, Browser, Gerät, anonymisierte IP
CREATE TABLE IF NOT EXISTS page_views (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
path text NOT NULL,
timestamp timestamptz NOT NULL DEFAULT now(),
ip_anon text, -- IPv4: x.x.x.0 (DSGVO-anonymisiert)
device_type text CHECK (device_type IN ('desktop','tablet','mobile')),
browser text, -- Chrome/Firefox/Safari/Edge/Opera/Other
os text, -- Windows/macOS/iOS/Android/Linux/Other
referrer text,
session_id text NOT NULL, -- UUID aus sessionStorage
duration_ms int, -- Verweildauer in Millisekunden
is_bot boolean NOT NULL DEFAULT false
);
-- Indizes für häufige Analytics-Abfragen
CREATE INDEX IF NOT EXISTS idx_pv_timestamp ON page_views (timestamp DESC);
CREATE INDEX IF NOT EXISTS idx_pv_path ON page_views (path);
CREATE INDEX IF NOT EXISTS idx_pv_session ON page_views (session_id);
CREATE INDEX IF NOT EXISTS idx_pv_is_bot ON page_views (is_bot) WHERE is_bot = false;
CREATE INDEX IF NOT EXISTS idx_pv_path_date ON page_views (path, timestamp DESC) WHERE is_bot = false;
-- RLS: Nur Service-Role kann schreiben, Reads später für Admin
ALTER TABLE page_views ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Service-Role Vollzugriff" ON page_views
USING (true)
WITH CHECK (true);
-- Automatisches Cleanup nach 13 Monaten (DSGVO-Datensparsamkeit)
-- Kann via Supabase scheduled function oder pg_cron ausgelöst werden
-- HINWEIS: Diesen Query regelmäßig per Cron Job aufrufen:
-- DELETE FROM page_views WHERE timestamp < now() - interval '13 months';