Files
avbeat-com/supabase/migrations/20260322220000_company_coverage.sql
2026-05-07 16:39:17 +00:00

82 lines
3.3 KiB
SQL

-- ============================================================
-- Migration: company_coverage
-- Timestamp: 20260322220000
-- ============================================================
-- 1. company_coverage_queue table
CREATE TABLE IF NOT EXISTS public.company_coverage_queue (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
company_name TEXT NOT NULL,
source_article_id TEXT,
source_article_title TEXT,
source_article_slug TEXT,
source_type TEXT DEFAULT 'native', -- 'native' or 'imported'
ai_draft_title TEXT,
ai_draft_content TEXT,
ai_draft_excerpt TEXT,
status TEXT NOT NULL DEFAULT 'queued', -- 'queued', 'approved', 'published', 'dismissed'
reminder_sent BOOLEAN DEFAULT FALSE,
reminder_sent_at TIMESTAMPTZ,
reviewed_by UUID REFERENCES public.user_profiles(id) ON DELETE SET NULL,
reviewed_at TIMESTAMPTZ,
published_article_id UUID,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_company_coverage_status ON public.company_coverage_queue(status);
CREATE INDEX IF NOT EXISTS idx_company_coverage_company ON public.company_coverage_queue(company_name);
CREATE INDEX IF NOT EXISTS idx_company_coverage_created ON public.company_coverage_queue(created_at DESC);
-- 2. autopilot_settings table (single-row config)
CREATE TABLE IF NOT EXISTS public.autopilot_settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
autopilot_enabled BOOLEAN NOT NULL DEFAULT FALSE,
reminder_email TEXT NOT NULL DEFAULT 'ryan.salazar@relevantmediaproperties.com',
scan_interval_hours INTEGER NOT NULL DEFAULT 24,
last_scan_at TIMESTAMPTZ,
last_scan_articles_processed INTEGER DEFAULT 0,
last_scan_companies_found INTEGER DEFAULT 0,
updated_by UUID REFERENCES public.user_profiles(id) ON DELETE SET NULL,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
-- Insert default settings row
INSERT INTO public.autopilot_settings (autopilot_enabled, reminder_email)
VALUES (FALSE, 'ryan.salazar@relevantmediaproperties.com')
ON CONFLICT DO NOTHING;
-- 3. Enable RLS
ALTER TABLE public.company_coverage_queue ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.autopilot_settings ENABLE ROW LEVEL SECURITY;
-- 4. RLS Policies for company_coverage_queue
DROP POLICY IF EXISTS "admin_manage_company_coverage" ON public.company_coverage_queue;
CREATE POLICY "admin_manage_company_coverage"
ON public.company_coverage_queue
FOR ALL
TO authenticated
USING (true)
WITH CHECK (true);
-- 5. RLS Policies for autopilot_settings
DROP POLICY IF EXISTS "admin_manage_autopilot_settings" ON public.autopilot_settings;
CREATE POLICY "admin_manage_autopilot_settings"
ON public.autopilot_settings
FOR ALL
TO authenticated
USING (true)
WITH CHECK (true);
-- 6. Trigger for updated_at on company_coverage_queue
DROP TRIGGER IF EXISTS update_company_coverage_updated_at ON public.company_coverage_queue;
CREATE TRIGGER update_company_coverage_updated_at
BEFORE UPDATE ON public.company_coverage_queue
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at();
-- 7. Trigger for updated_at on autopilot_settings
DROP TRIGGER IF EXISTS update_autopilot_settings_updated_at ON public.autopilot_settings;
CREATE TRIGGER update_autopilot_settings_updated_at
BEFORE UPDATE ON public.autopilot_settings
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at();