27 lines
1.3 KiB
SQL
27 lines
1.3 KiB
SQL
|
|
-- =====================================================================
|
||
|
|
-- NOTIFICATION SCHEMA — Part 19: marketing campaigns
|
||
|
|
-- A campaign sends an SMS or Email to a user segment (resolved from identity.users)
|
||
|
|
-- via the configured channel providers.
|
||
|
|
-- =====================================================================
|
||
|
|
|
||
|
|
SET search_path TO notification, public;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS campaigns (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
tenant_id UUID NOT NULL,
|
||
|
|
name TEXT NOT NULL,
|
||
|
|
channel TEXT NOT NULL, -- 'sms' | 'email'
|
||
|
|
audience TEXT NOT NULL DEFAULT 'all', -- 'all' | 'verified' | 'with_plan'
|
||
|
|
subject TEXT, -- email only
|
||
|
|
body_html TEXT, -- email body / sms text
|
||
|
|
template_code TEXT, -- optional email template
|
||
|
|
status TEXT NOT NULL DEFAULT 'Draft', -- Draft | Sending | Sent | Failed
|
||
|
|
total_count INT NOT NULL DEFAULT 0,
|
||
|
|
sent_count INT NOT NULL DEFAULT 0,
|
||
|
|
failed_count INT NOT NULL DEFAULT 0,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
sent_at TIMESTAMPTZ
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_campaigns_tenant ON campaigns (tenant_id, created_at DESC);
|