37 lines
1.8 KiB
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';
|