0039_drop_dead_webapi_features.down.sql 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. -- Rollback: recreate the analytics (0019), buddy feed (0020), and
  2. -- vanity URL (0021) tables that 0039 dropped.
  3. -- API usage analytics (from 0019_api_analytics).
  4. CREATE TABLE IF NOT EXISTS api_usage_logs (
  5. id INTEGER PRIMARY KEY AUTOINCREMENT,
  6. dev_id VARCHAR(255) NOT NULL,
  7. endpoint VARCHAR(255) NOT NULL,
  8. method VARCHAR(10) NOT NULL,
  9. timestamp INTEGER NOT NULL,
  10. response_time_ms INTEGER,
  11. status_code INTEGER,
  12. ip_address VARCHAR(45),
  13. user_agent TEXT,
  14. screen_name VARCHAR(16),
  15. error_message TEXT,
  16. request_size INTEGER,
  17. response_size INTEGER
  18. );
  19. CREATE INDEX idx_usage_dev_id ON api_usage_logs(dev_id);
  20. CREATE INDEX idx_usage_timestamp ON api_usage_logs(timestamp);
  21. CREATE INDEX idx_usage_endpoint ON api_usage_logs(endpoint);
  22. CREATE INDEX idx_usage_status ON api_usage_logs(status_code);
  23. CREATE INDEX idx_usage_screen_name ON api_usage_logs(screen_name);
  24. CREATE TABLE IF NOT EXISTS api_usage_stats (
  25. id INTEGER PRIMARY KEY AUTOINCREMENT,
  26. dev_id VARCHAR(255) NOT NULL,
  27. endpoint VARCHAR(255) NOT NULL,
  28. period_type VARCHAR(10) NOT NULL,
  29. period_start INTEGER NOT NULL,
  30. request_count INTEGER DEFAULT 0,
  31. error_count INTEGER DEFAULT 0,
  32. total_response_time_ms INTEGER DEFAULT 0,
  33. avg_response_time_ms INTEGER DEFAULT 0,
  34. total_request_bytes INTEGER DEFAULT 0,
  35. total_response_bytes INTEGER DEFAULT 0,
  36. unique_users INTEGER DEFAULT 0,
  37. UNIQUE(dev_id, endpoint, period_type, period_start)
  38. );
  39. CREATE INDEX idx_stats_dev_id ON api_usage_stats(dev_id);
  40. CREATE INDEX idx_stats_period ON api_usage_stats(period_type, period_start);
  41. CREATE INDEX idx_stats_endpoint ON api_usage_stats(endpoint);
  42. CREATE TABLE IF NOT EXISTS api_quotas (
  43. dev_id VARCHAR(255) PRIMARY KEY,
  44. daily_limit INTEGER DEFAULT 10000,
  45. monthly_limit INTEGER DEFAULT 300000,
  46. daily_used INTEGER DEFAULT 0,
  47. monthly_used INTEGER DEFAULT 0,
  48. last_reset_daily INTEGER NOT NULL,
  49. last_reset_monthly INTEGER NOT NULL,
  50. overage_allowed BOOLEAN DEFAULT FALSE
  51. );
  52. -- Buddy feeds (from 0020_buddy_feeds).
  53. CREATE TABLE IF NOT EXISTS buddy_feeds (
  54. id INTEGER PRIMARY KEY AUTOINCREMENT,
  55. screen_name VARCHAR(16) NOT NULL,
  56. feed_type VARCHAR(50) NOT NULL,
  57. title TEXT,
  58. description TEXT,
  59. link TEXT,
  60. published_at INTEGER NOT NULL,
  61. created_at INTEGER NOT NULL,
  62. updated_at INTEGER NOT NULL,
  63. is_active BOOLEAN DEFAULT TRUE
  64. );
  65. CREATE INDEX idx_buddy_feeds_screen_name ON buddy_feeds(screen_name);
  66. CREATE INDEX idx_buddy_feeds_published ON buddy_feeds(published_at);
  67. CREATE INDEX idx_buddy_feeds_type ON buddy_feeds(feed_type);
  68. CREATE INDEX idx_buddy_feeds_active ON buddy_feeds(is_active);
  69. CREATE TABLE IF NOT EXISTS buddy_feed_items (
  70. id INTEGER PRIMARY KEY AUTOINCREMENT,
  71. feed_id INTEGER NOT NULL,
  72. title TEXT NOT NULL,
  73. description TEXT,
  74. link TEXT,
  75. guid TEXT,
  76. author VARCHAR(16),
  77. categories TEXT,
  78. published_at INTEGER NOT NULL,
  79. created_at INTEGER NOT NULL,
  80. FOREIGN KEY (feed_id) REFERENCES buddy_feeds(id) ON DELETE CASCADE
  81. );
  82. CREATE INDEX idx_feed_items_feed_id ON buddy_feed_items(feed_id);
  83. CREATE INDEX idx_feed_items_published ON buddy_feed_items(published_at);
  84. CREATE INDEX idx_feed_items_guid ON buddy_feed_items(guid);
  85. CREATE TABLE IF NOT EXISTS buddy_feed_subscriptions (
  86. id INTEGER PRIMARY KEY AUTOINCREMENT,
  87. subscriber_screen_name VARCHAR(16) NOT NULL,
  88. feed_id INTEGER NOT NULL,
  89. subscribed_at INTEGER NOT NULL,
  90. last_checked_at INTEGER,
  91. FOREIGN KEY (feed_id) REFERENCES buddy_feeds(id) ON DELETE CASCADE,
  92. UNIQUE(subscriber_screen_name, feed_id)
  93. );
  94. CREATE INDEX idx_feed_subs_subscriber ON buddy_feed_subscriptions(subscriber_screen_name);
  95. CREATE INDEX idx_feed_subs_feed_id ON buddy_feed_subscriptions(feed_id);
  96. -- Vanity URLs (from 0021_vanity_urls).
  97. CREATE TABLE IF NOT EXISTS vanity_urls (
  98. screen_name VARCHAR(16) PRIMARY KEY,
  99. vanity_url VARCHAR(255) UNIQUE NOT NULL,
  100. display_name VARCHAR(100),
  101. bio TEXT,
  102. location VARCHAR(100),
  103. website VARCHAR(255),
  104. created_at INTEGER NOT NULL,
  105. updated_at INTEGER NOT NULL,
  106. is_active BOOLEAN DEFAULT TRUE,
  107. click_count INTEGER DEFAULT 0,
  108. last_accessed INTEGER
  109. );
  110. CREATE INDEX idx_vanity_urls_url ON vanity_urls(vanity_url);
  111. CREATE INDEX idx_vanity_urls_active ON vanity_urls(is_active);
  112. CREATE INDEX idx_vanity_urls_created ON vanity_urls(created_at);
  113. CREATE TABLE IF NOT EXISTS vanity_url_redirects (
  114. id INTEGER PRIMARY KEY AUTOINCREMENT,
  115. vanity_url VARCHAR(255) NOT NULL,
  116. accessed_at INTEGER NOT NULL,
  117. ip_address VARCHAR(45),
  118. user_agent TEXT,
  119. referer TEXT,
  120. FOREIGN KEY (vanity_url) REFERENCES vanity_urls(vanity_url) ON DELETE CASCADE
  121. );
  122. CREATE INDEX idx_vanity_redirects_url ON vanity_url_redirects(vanity_url);
  123. CREATE INDEX idx_vanity_redirects_time ON vanity_url_redirects(accessed_at);