Files
firefrost-services/services/arbiter-3.0/migrations/108_social_analytics.sql
Claude be2f5eb5a5 fix: Add platform_post_id column per Gemini review
- Added platform_post_id VARCHAR(255) for Phase 2 API matching
- Added composite index on (platform, platform_post_id)
- Future-proofs manual entries for automatic API sync

Chronicler #76 (per Gemini consultation)
2026-04-10 20:19:49 +00:00

77 lines
2.4 KiB
SQL

-- Social Analytics Tables
-- Task #108: TikTok Analytics Dashboard (Phase 1 - Manual Entry)
-- Created by Chronicler #76
-- Platform enum for future expansion
CREATE TYPE social_platform AS ENUM ('tiktok', 'facebook', 'instagram', 'x', 'bluesky');
-- Individual post tracking
CREATE TABLE social_posts (
id SERIAL PRIMARY KEY,
platform social_platform NOT NULL DEFAULT 'tiktok',
post_title VARCHAR(255) NOT NULL,
post_url VARCHAR(500),
posted_at TIMESTAMP NOT NULL,
video_length_seconds INTEGER,
-- Core engagement metrics
views INTEGER DEFAULT 0,
likes INTEGER DEFAULT 0,
comments INTEGER DEFAULT 0,
shares INTEGER DEFAULT 0,
saves INTEGER DEFAULT 0,
-- Watch metrics
total_play_time_seconds INTEGER DEFAULT 0,
avg_watch_time_seconds DECIMAL(10,2) DEFAULT 0,
watched_full_pct DECIMAL(5,2) DEFAULT 0,
drop_off_seconds INTEGER,
-- Growth metrics
new_followers INTEGER DEFAULT 0,
-- Traffic source (store top source)
top_traffic_source VARCHAR(50),
top_traffic_pct DECIMAL(5,2),
-- Metadata
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
notes TEXT,
-- Platform native ID (for Phase 2 API matching)
platform_post_id VARCHAR(255)
);
-- Account-level snapshots (weekly or on-demand)
CREATE TABLE social_account_snapshots (
id SERIAL PRIMARY KEY,
platform social_platform NOT NULL DEFAULT 'tiktok',
snapshot_date DATE NOT NULL,
-- Account metrics
total_followers INTEGER DEFAULT 0,
profile_views INTEGER DEFAULT 0,
-- Top search queries (JSON array)
search_queries JSONB,
-- Audience demographics (JSON)
demographics JSONB,
created_at TIMESTAMP DEFAULT NOW(),
-- One snapshot per platform per day
UNIQUE(platform, snapshot_date)
);
-- Indexes for common queries
CREATE INDEX idx_social_posts_platform ON social_posts(platform);
CREATE INDEX idx_social_posts_posted_at ON social_posts(posted_at DESC);
CREATE INDEX idx_social_posts_platform_post_id ON social_posts(platform, platform_post_id);
CREATE INDEX idx_social_snapshots_platform_date ON social_account_snapshots(platform, snapshot_date DESC);
-- Comments
COMMENT ON TABLE social_posts IS 'Individual social media post analytics (manual entry for now, API later)';
COMMENT ON TABLE social_account_snapshots IS 'Account-level metrics snapshots for trend tracking';