- 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)
77 lines
2.4 KiB
SQL
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';
|