o2o-infinith-demo/supabase/migrations/20260403_pipeline_v2.sql
Haewon Kam 7557ef774c feat: Pipeline V2 — 3-phase analysis with verified channel discovery
Restructured the entire analysis pipeline from AI-guessing social
handles to deterministic 3-phase discovery + collection + generation.

Phase 1 (discover-channels): 3-source channel discovery
  - Firecrawl scrape: extract social links from HTML
  - Perplexity search: find handles via web search
  - URL regex parsing: deterministic link extraction
  - Handle verification: HEAD requests + YouTube API
  - DB: creates row with verified_channels + scrape_data

Phase 2 (collect-channel-data): 9 parallel data collectors
  - Instagram (Apify), YouTube (Data API v3), Facebook (Apify)
  - 강남언니 (Firecrawl), Naver Blog + Place (Naver API)
  - Google Maps (Apify), Market analysis (Perplexity 4x parallel)
  - DB: stores ALL raw data in channel_data column

Phase 3 (generate-report): AI report from real data
  - Reads channel_data + analysis_data from DB
  - Builds channel summary with real metrics
  - AI generates report using only verified data
  - V1 backwards compatibility preserved (url-based flow)

Supporting changes:
  - DB migration: status, verified_channels, channel_data columns
  - _shared/extractSocialLinks.ts: regex-based social link parser
  - _shared/verifyHandles.ts: multi-platform handle verifier
  - AnalysisLoadingPage: real 3-phase progress + channel panel
  - useReport: channel_data column support + V2 enrichment merge
  - 강남언니 rating: auto-correct 5→10 scale + search fallback
  - KPIDashboard: navigate() instead of <a href>
  - Loading text: 20-30초 → 1-2분

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 21:49:13 +09:00

17 lines
832 B
SQL

-- Pipeline V2: Add columns for 3-phase analysis pipeline
-- Phase 1 (discover-channels) → Phase 2 (collect-channel-data) → Phase 3 (generate-report)
ALTER TABLE marketing_reports
ADD COLUMN IF NOT EXISTS status TEXT DEFAULT 'pending',
ADD COLUMN IF NOT EXISTS verified_channels JSONB DEFAULT '{}',
ADD COLUMN IF NOT EXISTS channel_data JSONB DEFAULT '{}',
ADD COLUMN IF NOT EXISTS pipeline_started_at TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS pipeline_completed_at TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS error_message TEXT;
-- Mark all existing rows as complete (they were generated by the old pipeline)
UPDATE marketing_reports SET status = 'complete' WHERE status IS NULL OR status = 'pending';
-- Index for frontend polling
CREATE INDEX IF NOT EXISTS idx_marketing_reports_status ON marketing_reports(id, status);