o2o-infinith-demo/supabase/migrations/20260330_create_tables.sql

41 lines
1.4 KiB
SQL

-- Scrape results cache
CREATE TABLE IF NOT EXISTS scrape_results (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
url TEXT NOT NULL,
clinic_name TEXT,
data JSONB NOT NULL DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Marketing intelligence reports
CREATE TABLE IF NOT EXISTS marketing_reports (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
url TEXT NOT NULL,
clinic_name TEXT,
report JSONB NOT NULL DEFAULT '{}',
scrape_data JSONB DEFAULT '{}',
analysis_data JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Enable RLS
ALTER TABLE scrape_results ENABLE ROW LEVEL SECURITY;
ALTER TABLE marketing_reports ENABLE ROW LEVEL SECURITY;
-- Service role can do everything (Edge Functions use service_role key)
CREATE POLICY "service_role_all_scrape" ON scrape_results
FOR ALL USING (auth.role() = 'service_role');
CREATE POLICY "service_role_all_reports" ON marketing_reports
FOR ALL USING (auth.role() = 'service_role');
-- Anon users can read their own reports (future: add user_id column)
CREATE POLICY "anon_read_reports" ON marketing_reports
FOR SELECT USING (true);
-- Index for faster lookups
CREATE INDEX idx_scrape_results_url ON scrape_results(url);
CREATE INDEX idx_marketing_reports_url ON marketing_reports(url);
CREATE INDEX idx_marketing_reports_created ON marketing_reports(created_at DESC);