Spaces:
Runtime error
Runtime error
File size: 7,181 Bytes
48b0cc4 db43121 c02daee bc4815d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | -- Users (B2B SaaS Abonelik ve Kredi Takibi)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
clerk_id TEXT UNIQUE NOT NULL,
stripe_customer_id TEXT UNIQUE,
email TEXT NOT NULL,
plan_type TEXT DEFAULT 'free',
credits INT DEFAULT 5,
created_at TIMESTAMPTZ DEFAULT now()
);
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Enable read access for all users" ON users FOR SELECT USING (true);
CREATE POLICY "Enable insert access for all users" ON users FOR INSERT WITH CHECK (true);
CREATE POLICY "Enable update access for all users" ON users FOR UPDATE USING (true);
-- Scans (Taramalar)
CREATE TABLE scans (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
category TEXT NOT NULL,
mode TEXT NOT NULL,
status TEXT DEFAULT 'completed',
report_preview TEXT,
leads_count INT DEFAULT 0,
angles_count INT DEFAULT 0,
full_report JSONB,
created_at TIMESTAMPTZ DEFAULT now()
);
-- Leads (Müşteri Adayları)
CREATE TABLE leads (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
source TEXT NOT NULL,
title TEXT NOT NULL,
url TEXT,
description TEXT,
score INT DEFAULT 0,
status TEXT DEFAULT 'new',
dm_template TEXT,
scan_category TEXT,
created_at TIMESTAMPTZ DEFAULT now()
);
-- Waitlists (Bekleme Listeleri)
CREATE TABLE waitlists (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
target_audience TEXT,
emails TEXT[] DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT now()
);
-- Allow public access for now since we don't have auth yet
ALTER TABLE scans ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Enable read access for all users" ON scans FOR SELECT USING (true);
CREATE POLICY "Enable insert access for all users" ON scans FOR INSERT WITH CHECK (true);
CREATE POLICY "Enable update access for all users" ON scans FOR UPDATE USING (true);
ALTER TABLE leads ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Enable read access for all users" ON leads FOR SELECT USING (true);
CREATE POLICY "Enable insert access for all users" ON leads FOR INSERT WITH CHECK (true);
CREATE POLICY "Enable update access for all users" ON leads FOR UPDATE USING (true);
ALTER TABLE waitlists ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Enable read access for all users" ON waitlists FOR SELECT USING (true);
CREATE POLICY "Enable insert access for all users" ON waitlists FOR INSERT WITH CHECK (true);
CREATE POLICY "Enable update access for all users" ON waitlists FOR UPDATE USING (true);
-- Chat Messages (AI Fikir Danışmanı Sohbet Geçmişi)
CREATE TABLE chat_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
scan_id TEXT NOT NULL,
role TEXT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
ALTER TABLE chat_messages ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Enable read access for all users" ON chat_messages FOR SELECT USING (true);
CREATE POLICY "Enable insert access for all users" ON chat_messages FOR INSERT WITH CHECK (true);
-- ============================================================
-- GALLERY (Discover Gallery — V8)
-- Mevcut scans tablosuna gallery kolonları eklenir.
-- Supabase SQL Editöründe çalıştır.
-- ============================================================
ALTER TABLE scans ADD COLUMN IF NOT EXISTS is_gallery BOOLEAN DEFAULT false;
ALTER TABLE scans ADD COLUMN IF NOT EXISTS gallery_title TEXT;
ALTER TABLE scans ADD COLUMN IF NOT EXISTS gallery_summary TEXT;
ALTER TABLE scans ADD COLUMN IF NOT EXISTS gallery_tags TEXT[];
ALTER TABLE scans ADD COLUMN IF NOT EXISTS gallery_score INT DEFAULT 0;
ALTER TABLE scans ADD COLUMN IF NOT EXISTS gallery_emoji TEXT DEFAULT '💡';
-- "2025-W15" formatı — aynı kategori + hafta için dedup
ALTER TABLE scans ADD COLUMN IF NOT EXISTS gallery_week TEXT;
-- Duplikasyon önleme: aynı kategori + aynı hafta sadece 1 galeri kaydı
CREATE UNIQUE INDEX IF NOT EXISTS idx_gallery_category_week
ON scans (category, gallery_week)
WHERE is_gallery = true;
-- Galeri listeleme sorguları için bileşik index
CREATE INDEX IF NOT EXISTS idx_gallery_listing
ON scans (is_gallery, gallery_score DESC, created_at DESC)
WHERE is_gallery = true;
-- ============================================================
-- ALERTS (Niş Alarm Sistemi — V8)
-- ============================================================
CREATE TABLE IF NOT EXISTS alerts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
keyword TEXT NOT NULL,
email TEXT NOT NULL,
channels TEXT[] DEFAULT '{"reddit","github","huggingface"}',
frequency TEXT DEFAULT 'daily', -- 'daily' | 'weekly'
is_active BOOLEAN DEFAULT true,
last_triggered_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now()
);
ALTER TABLE alerts ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Enable read access for all users" ON alerts FOR SELECT USING (true);
CREATE POLICY "Enable insert access for all users" ON alerts FOR INSERT WITH CHECK (true);
CREATE POLICY "Enable update access for all users" ON alerts FOR UPDATE USING (true);
CREATE POLICY "Enable delete access for all users" ON alerts FOR DELETE USING (true);
CREATE INDEX IF NOT EXISTS idx_alerts_active ON alerts (is_active, frequency) WHERE is_active = true;
-- ============================================================
-- API PRICING (Birim Maliyet Veritabanı — S1)
-- AI sağlayıcılarının güncel fiyat snapshot'ları.
-- ============================================================
CREATE TABLE IF NOT EXISTS api_pricing (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
provider TEXT NOT NULL,
model TEXT NOT NULL,
unit TEXT,
price_usd TEXT,
note TEXT,
scraped_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_api_pricing_provider ON api_pricing (provider, model, scraped_at DESC);
ALTER TABLE api_pricing ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Enable read access for all users" ON api_pricing FOR SELECT USING (true);
CREATE POLICY "Enable insert access for all users" ON api_pricing FOR INSERT WITH CHECK (true);
-- ============================================================
-- AUDIT TRAIL (Güven Endeksi Denetim Kaydı — S1/S5)
-- Her rapordaki iddiaların kaynak eşleştirme sonuçları.
-- ============================================================
CREATE TABLE IF NOT EXISTS audit_trail (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
report_id TEXT NOT NULL,
claim_text TEXT NOT NULL,
claim_class TEXT, -- 'critical' | 'material' | 'descriptive'
source_url TEXT,
verified BOOLEAN DEFAULT false,
confidence FLOAT,
unknown_category TEXT, -- fallback durumunda kategori logu
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_audit_trail_report ON audit_trail (report_id);
ALTER TABLE audit_trail ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Enable read access for all users" ON audit_trail FOR SELECT USING (true);
CREATE POLICY "Enable insert access for all users" ON audit_trail FOR INSERT WITH CHECK (true);
|