migration: subscribers-Tabelle mit DOI-Feldern und Consent-Tracking (Finding 3)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
31
migrations/pg/2026-04-17_subscribers-doi.sql
Normal file
31
migrations/pg/2026-04-17_subscribers-doi.sql
Normal file
@@ -0,0 +1,31 @@
|
||||
-- Subscribers-Tabelle mit Double-Opt-In und DSGVO-Consent-Tracking
|
||||
-- Wird pro Tenant-Schema ausgeführt (SET search_path = tenant_<id>, public vorher)
|
||||
|
||||
CREATE TABLE IF NOT EXISTS subscribers (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
email TEXT NOT NULL,
|
||||
email_hash TEXT NOT NULL UNIQUE,
|
||||
status TEXT NOT NULL DEFAULT 'pending'
|
||||
CHECK (status IN ('pending', 'active', 'unsubscribed', 'bounced')),
|
||||
list_id UUID,
|
||||
|
||||
-- Double-Opt-In (DSGVO-Pflicht)
|
||||
doi_token TEXT UNIQUE,
|
||||
doi_requested_at TIMESTAMPTZ,
|
||||
doi_confirmed_at TIMESTAMPTZ,
|
||||
|
||||
-- Consent-Nachweis
|
||||
consent_ip INET,
|
||||
consent_user_agent TEXT,
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_subscribers_email_hash ON subscribers(email_hash);
|
||||
CREATE INDEX IF NOT EXISTS idx_subscribers_doi_token ON subscribers(doi_token);
|
||||
CREATE INDEX IF NOT EXISTS idx_subscribers_status ON subscribers(status);
|
||||
|
||||
CREATE OR REPLACE TRIGGER subscribers_updated_at
|
||||
BEFORE UPDATE ON subscribers
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
||||
Reference in New Issue
Block a user