- Replace mock useReport() with real Supabase API data pipeline - Add transformReport.ts to map API responses to MarketingReport type - Add useEnrichment() hook for background channel data enrichment - Replace Apify YouTube scraper with YouTube Data API v3 - Add mergeEnrichment() for progressive data loading - Add EmptyState component for graceful empty data handling - Add socialHandles to generate-report metadata - Graceful empty data in ClinicSnapshot, YouTube, Instagram, Facebook - Add Supabase Edge Functions and DB migrations - Add developer handoff documentation Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
41 lines
1.4 KiB
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);
|