social-reporting-tool/db/init.sql
DJP 50e1675b10 Initial commit: Social Listening Pipeline
8-stage TypeScript pipeline with Apify scraping, Claude AI analysis,
real-time dashboard with SSE, PostgreSQL cost tracking, and Apify budget controls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 22:18:02 -04:00

36 lines
1.5 KiB
SQL

-- Social Listening Pipeline — Cost Tracking Schema
CREATE TABLE IF NOT EXISTS runs (
id SERIAL PRIMARY KEY,
client_name TEXT NOT NULL,
category TEXT NOT NULL,
platforms TEXT[] NOT NULL DEFAULT '{}',
brief_json JSONB NOT NULL,
status TEXT NOT NULL DEFAULT 'running', -- running | completed | failed
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
finished_at TIMESTAMPTZ,
total_cost_usd NUMERIC(10,6) NOT NULL DEFAULT 0,
claude_cost_usd NUMERIC(10,6) NOT NULL DEFAULT 0,
apify_cost_usd NUMERIC(10,6) NOT NULL DEFAULT 0,
total_input_tokens INTEGER NOT NULL DEFAULT 0,
total_output_tokens INTEGER NOT NULL DEFAULT 0,
report_path TEXT
);
CREATE TABLE IF NOT EXISTS cost_events (
id SERIAL PRIMARY KEY,
run_id INTEGER NOT NULL REFERENCES runs(id) ON DELETE CASCADE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
stage INTEGER NOT NULL,
stage_name TEXT NOT NULL,
source TEXT NOT NULL, -- 'claude' | 'apify'
label TEXT NOT NULL, -- e.g. 'CM Review', 'TikTok hashtag: hm'
model TEXT, -- claude model name or apify actor id
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cost_usd NUMERIC(10,6) NOT NULL DEFAULT 0,
metadata JSONB -- extra info (run_id for apify, etc.)
);
CREATE INDEX idx_cost_events_run_id ON cost_events(run_id);
CREATE INDEX idx_runs_started_at ON runs(started_at DESC);