| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- -- Rollback: recreate the analytics (0019), buddy feed (0020), and
- -- vanity URL (0021) tables that 0039 dropped.
- -- API usage analytics (from 0019_api_analytics).
- CREATE TABLE IF NOT EXISTS api_usage_logs (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- dev_id VARCHAR(255) NOT NULL,
- endpoint VARCHAR(255) NOT NULL,
- method VARCHAR(10) NOT NULL,
- timestamp INTEGER NOT NULL,
- response_time_ms INTEGER,
- status_code INTEGER,
- ip_address VARCHAR(45),
- user_agent TEXT,
- screen_name VARCHAR(16),
- error_message TEXT,
- request_size INTEGER,
- response_size INTEGER
- );
- CREATE INDEX idx_usage_dev_id ON api_usage_logs(dev_id);
- CREATE INDEX idx_usage_timestamp ON api_usage_logs(timestamp);
- CREATE INDEX idx_usage_endpoint ON api_usage_logs(endpoint);
- CREATE INDEX idx_usage_status ON api_usage_logs(status_code);
- CREATE INDEX idx_usage_screen_name ON api_usage_logs(screen_name);
- CREATE TABLE IF NOT EXISTS api_usage_stats (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- dev_id VARCHAR(255) NOT NULL,
- endpoint VARCHAR(255) NOT NULL,
- period_type VARCHAR(10) NOT NULL,
- period_start INTEGER NOT NULL,
- request_count INTEGER DEFAULT 0,
- error_count INTEGER DEFAULT 0,
- total_response_time_ms INTEGER DEFAULT 0,
- avg_response_time_ms INTEGER DEFAULT 0,
- total_request_bytes INTEGER DEFAULT 0,
- total_response_bytes INTEGER DEFAULT 0,
- unique_users INTEGER DEFAULT 0,
- UNIQUE(dev_id, endpoint, period_type, period_start)
- );
- CREATE INDEX idx_stats_dev_id ON api_usage_stats(dev_id);
- CREATE INDEX idx_stats_period ON api_usage_stats(period_type, period_start);
- CREATE INDEX idx_stats_endpoint ON api_usage_stats(endpoint);
- CREATE TABLE IF NOT EXISTS api_quotas (
- dev_id VARCHAR(255) PRIMARY KEY,
- daily_limit INTEGER DEFAULT 10000,
- monthly_limit INTEGER DEFAULT 300000,
- daily_used INTEGER DEFAULT 0,
- monthly_used INTEGER DEFAULT 0,
- last_reset_daily INTEGER NOT NULL,
- last_reset_monthly INTEGER NOT NULL,
- overage_allowed BOOLEAN DEFAULT FALSE
- );
- -- Buddy feeds (from 0020_buddy_feeds).
- CREATE TABLE IF NOT EXISTS buddy_feeds (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- screen_name VARCHAR(16) NOT NULL,
- feed_type VARCHAR(50) NOT NULL,
- title TEXT,
- description TEXT,
- link TEXT,
- published_at INTEGER NOT NULL,
- created_at INTEGER NOT NULL,
- updated_at INTEGER NOT NULL,
- is_active BOOLEAN DEFAULT TRUE
- );
- CREATE INDEX idx_buddy_feeds_screen_name ON buddy_feeds(screen_name);
- CREATE INDEX idx_buddy_feeds_published ON buddy_feeds(published_at);
- CREATE INDEX idx_buddy_feeds_type ON buddy_feeds(feed_type);
- CREATE INDEX idx_buddy_feeds_active ON buddy_feeds(is_active);
- CREATE TABLE IF NOT EXISTS buddy_feed_items (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- feed_id INTEGER NOT NULL,
- title TEXT NOT NULL,
- description TEXT,
- link TEXT,
- guid TEXT,
- author VARCHAR(16),
- categories TEXT,
- published_at INTEGER NOT NULL,
- created_at INTEGER NOT NULL,
- FOREIGN KEY (feed_id) REFERENCES buddy_feeds(id) ON DELETE CASCADE
- );
- CREATE INDEX idx_feed_items_feed_id ON buddy_feed_items(feed_id);
- CREATE INDEX idx_feed_items_published ON buddy_feed_items(published_at);
- CREATE INDEX idx_feed_items_guid ON buddy_feed_items(guid);
- CREATE TABLE IF NOT EXISTS buddy_feed_subscriptions (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- subscriber_screen_name VARCHAR(16) NOT NULL,
- feed_id INTEGER NOT NULL,
- subscribed_at INTEGER NOT NULL,
- last_checked_at INTEGER,
- FOREIGN KEY (feed_id) REFERENCES buddy_feeds(id) ON DELETE CASCADE,
- UNIQUE(subscriber_screen_name, feed_id)
- );
- CREATE INDEX idx_feed_subs_subscriber ON buddy_feed_subscriptions(subscriber_screen_name);
- CREATE INDEX idx_feed_subs_feed_id ON buddy_feed_subscriptions(feed_id);
- -- Vanity URLs (from 0021_vanity_urls).
- CREATE TABLE IF NOT EXISTS vanity_urls (
- screen_name VARCHAR(16) PRIMARY KEY,
- vanity_url VARCHAR(255) UNIQUE NOT NULL,
- display_name VARCHAR(100),
- bio TEXT,
- location VARCHAR(100),
- website VARCHAR(255),
- created_at INTEGER NOT NULL,
- updated_at INTEGER NOT NULL,
- is_active BOOLEAN DEFAULT TRUE,
- click_count INTEGER DEFAULT 0,
- last_accessed INTEGER
- );
- CREATE INDEX idx_vanity_urls_url ON vanity_urls(vanity_url);
- CREATE INDEX idx_vanity_urls_active ON vanity_urls(is_active);
- CREATE INDEX idx_vanity_urls_created ON vanity_urls(created_at);
- CREATE TABLE IF NOT EXISTS vanity_url_redirects (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- vanity_url VARCHAR(255) NOT NULL,
- accessed_at INTEGER NOT NULL,
- ip_address VARCHAR(45),
- user_agent TEXT,
- referer TEXT,
- FOREIGN KEY (vanity_url) REFERENCES vanity_urls(vanity_url) ON DELETE CASCADE
- );
- CREATE INDEX idx_vanity_redirects_url ON vanity_url_redirects(vanity_url);
- CREATE INDEX idx_vanity_redirects_time ON vanity_url_redirects(accessed_at);
|