34 lines
1.3 KiB
SQL
34 lines
1.3 KiB
SQL
-- Newsletter subscribers table for SMTP-based email system
|
|
|
|
CREATE TABLE IF NOT EXISTS public.newsletter_subscribers (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
email TEXT NOT NULL UNIQUE,
|
|
topics TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'unsubscribed')),
|
|
subscribed_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
|
|
unsubscribed_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_newsletter_subscribers_email ON public.newsletter_subscribers(email);
|
|
CREATE INDEX IF NOT EXISTS idx_newsletter_subscribers_status ON public.newsletter_subscribers(status);
|
|
|
|
ALTER TABLE public.newsletter_subscribers ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Only authenticated users (admins) can read/manage subscribers
|
|
DROP POLICY IF EXISTS "admin_manage_newsletter_subscribers" ON public.newsletter_subscribers;
|
|
CREATE POLICY "admin_manage_newsletter_subscribers"
|
|
ON public.newsletter_subscribers
|
|
FOR ALL
|
|
TO authenticated
|
|
USING (true)
|
|
WITH CHECK (true);
|
|
|
|
-- Allow public inserts (signup form)
|
|
DROP POLICY IF EXISTS "public_subscribe_newsletter" ON public.newsletter_subscribers;
|
|
CREATE POLICY "public_subscribe_newsletter"
|
|
ON public.newsletter_subscribers
|
|
FOR INSERT
|
|
TO public
|
|
WITH CHECK (true);
|