o2o-infinith-demo/supabase/migrations/20260330_create_tables.sql
Haewon Kam 60cd055042 feat: real API integration + YouTube Data API v3 + progressive loading
- 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>
2026-04-02 10:57:14 +09:00

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);