dubs-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/.claude/settings.local.json +280 -0
  2. package/CLAUDE.md +46 -0
  3. package/CONNECT4_PRODUCTION_DEPLOY.md +155 -0
  4. package/CURRENT_SESSION.md +171 -0
  5. package/CURRENT_SESSION_DRAW.md +516 -0
  6. package/MARCH_MADNESS_SURVIVOR.md +254 -0
  7. package/PANDA.md +166 -0
  8. package/Procfile +4 -0
  9. package/README.md +476 -0
  10. package/controllers/livescoresController.js +376 -0
  11. package/controllers/pickemController.js +554 -0
  12. package/controllers/survivorAdminController.js +887 -0
  13. package/controllers/survivorController.js +623 -0
  14. package/cron/oracleMonitor.js +77 -0
  15. package/cron/pickemOracleMonitor.js +73 -0
  16. package/data/jackpot-history.json +952 -0
  17. package/data/ncaaTeams.js +406 -0
  18. package/documentation/API_SECURITY_GUIDE.md +327 -0
  19. package/documentation/ARCADE_API.md +593 -0
  20. package/documentation/ARCADE_IMPLEMENTATION_SUMMARY.md +399 -0
  21. package/documentation/ARCADE_QUICKSTART.md +242 -0
  22. package/documentation/AUTOMATIC_MODE_ORACLE.md +321 -0
  23. package/documentation/BUG_FIX_COHORT_DATE_DISPLAY.md +171 -0
  24. package/documentation/CLAIM_MIGRATION_INSTRUCTIONS.md +52 -0
  25. package/documentation/CLAIM_STATUS_FIX.md +67 -0
  26. package/documentation/CLI_TOOL_GUIDE.md +372 -0
  27. package/documentation/COHORT_RETENTION_ANALYSIS.md +295 -0
  28. package/documentation/COHORT_RETENTION_IMPLEMENTATION_COMPLETE.md +461 -0
  29. package/documentation/COHORT_RETENTION_SUMMARY.md +204 -0
  30. package/documentation/COMPLETE_PROJECT_SUMMARY.md +490 -0
  31. package/documentation/DATABASE_QUERIES.md +269 -0
  32. package/documentation/DATABASE_RETENTION_POLICY.md +390 -0
  33. package/documentation/DATABASE_SETUP_GUIDE.md +361 -0
  34. package/documentation/DATABASE_SETUP_SUMMARY.md +247 -0
  35. package/documentation/DEMO_API_CURL_COMMANDS.md +656 -0
  36. package/documentation/DEPLOYMENT_SUMMARY.txt +100 -0
  37. package/documentation/DUPLICATE_NOTIFICATIONS_FIXED.md +201 -0
  38. package/documentation/EXCHANGE_RATES_INTEGRATION.md +371 -0
  39. package/documentation/FINAL_API_PROTECTION_TABLE.md +175 -0
  40. package/documentation/GAME_START_NOTIFICATIONS_DEPLOYMENT.md +256 -0
  41. package/documentation/GAME_START_NOTIFICATIONS_INTEGRATION.md +275 -0
  42. package/documentation/HEROKU_DEPLOYMENT.md +134 -0
  43. package/documentation/HEROKU_SCHEDULER_SETUP.md +271 -0
  44. package/documentation/JACKPOT_API.md +521 -0
  45. package/documentation/JACKPOT_DEPLOYMENT_GUIDE.md +362 -0
  46. package/documentation/JWT_IMPLEMENTATION_SUMMARY.md +373 -0
  47. package/documentation/JWT_QUICK_SETUP.md +268 -0
  48. package/documentation/JWT_TESTING_GUIDE.md +404 -0
  49. package/documentation/KEEPER_RECOVERY_GUIDE.md +381 -0
  50. package/documentation/KEEPER_SETUP.md +206 -0
  51. package/documentation/KEEPER_STATE_MACHINE.md +423 -0
  52. package/documentation/LATEST_PRODUCTION_SETUP.md +387 -0
  53. package/documentation/LOCAL_VOTING_TEST.md +279 -0
  54. package/documentation/ORACLE_FIXES_SUMMARY.md +188 -0
  55. package/documentation/ORACLE_POSTGRESQL_UPDATE.md +202 -0
  56. package/documentation/PAYMENT_DEPLOYMENT.md +209 -0
  57. package/documentation/PNL_TRACKING_SETUP.md +189 -0
  58. package/documentation/PREVENTING_LOCKUP_ERRORS.md +472 -0
  59. package/documentation/PRODUCTION_READY_SUMMARY.md +227 -0
  60. package/documentation/PUBLIC_VS_PRIVATE_ENDPOINTS.md +278 -0
  61. package/documentation/QUICK_AUTH_SETUP.md +99 -0
  62. package/documentation/QUICK_DEPLOY.md +224 -0
  63. package/documentation/QUICK_FIX.md +114 -0
  64. package/documentation/QUICK_START.md +152 -0
  65. package/documentation/REFEREE_MODE_GUIDE.md +392 -0
  66. package/documentation/RETENTION_CORE_ACTION_UPDATE.md +313 -0
  67. package/documentation/RETENTION_UPDATE_SUMMARY.md +108 -0
  68. package/documentation/RUN_MIGRATION_NOW.md +39 -0
  69. package/documentation/SCRIPTS_UPDATE_SUMMARY.md +251 -0
  70. package/documentation/SETUP_GUIDE.md +184 -0
  71. package/documentation/STATE_MACHINE_IMPLEMENTATION.md +250 -0
  72. package/documentation/TELEGRAM_NOTIFICATIONS_DIAGNOSIS.md +361 -0
  73. package/documentation/UNIFIED_ARCHITECTURE.md +231 -0
  74. package/documentation/VOTING_DEPLOYMENT_SUMMARY.md +392 -0
  75. package/documentation/WEBSOCKET_ARCHITECTURE.md +881 -0
  76. package/documentation/WHAT_WE_BUILT_TODAY.md +369 -0
  77. package/documentation/latest/LATEST_PRODUCTION_SETUP.md +865 -0
  78. package/ecosystem.config.js +65 -0
  79. package/env.template +125 -0
  80. package/middleware/apiKeyAuth.js +136 -0
  81. package/middleware/authenticate.js +214 -0
  82. package/middleware/developerUserAuth.js +76 -0
  83. package/middleware/socketAuth.js +69 -0
  84. package/package.json +49 -0
  85. package/postman/Dubs-API-v1-With-Voting.postman_collection.json +555 -0
  86. package/postman/Dubs-API-v1.postman_collection.json +205 -0
  87. package/postman/Dubs_Developer_API.postman_collection.json +662 -0
  88. package/postman/QUICKSTART.md +118 -0
  89. package/postman/QUICK_REFERENCE.md +246 -0
  90. package/postman/README.md +71 -0
  91. package/postman/VOTING_API_GUIDE.md +426 -0
  92. package/refactor/Animations.md +148 -0
  93. package/refactor/Chat.md +252 -0
  94. package/routes/actionsRoutes.js +699 -0
  95. package/routes/adminRoutes.js +370 -0
  96. package/routes/analyticsRoutes.js +1262 -0
  97. package/routes/arcadeRoutes.js +557 -0
  98. package/routes/authRoutes.js +2310 -0
  99. package/routes/avatarRoutes.js +85 -0
  100. package/routes/botRoutes.js +211 -0
  101. package/routes/chatRoutes.js +377 -0
  102. package/routes/cryptoPriceRoutes.js +105 -0
  103. package/routes/developerRoutes.js +4201 -0
  104. package/routes/deviceRoutes.js +214 -0
  105. package/routes/dmRoutes.js +167 -0
  106. package/routes/esportsRoutes.js +806 -0
  107. package/routes/exchangeRateRoutes.js +233 -0
  108. package/routes/gamesRoutes.js +3028 -0
  109. package/routes/jackpotRoutes.js +754 -0
  110. package/routes/keeperMonitoringRoutes.js +156 -0
  111. package/routes/keeperWebhookRoutes.js +466 -0
  112. package/routes/livescoresRoutes.js +31 -0
  113. package/routes/pickemAdminRoutes.js +199 -0
  114. package/routes/pickemRoutes.js +231 -0
  115. package/routes/playerStatsRoutes.js +147 -0
  116. package/routes/portfolioRoutes.js +217 -0
  117. package/routes/promoRoutes.js +418 -0
  118. package/routes/referralEarningsRoutes.js +392 -0
  119. package/routes/socialRoutes.js +459 -0
  120. package/routes/sportsRoutes.js +1271 -0
  121. package/routes/survivorAdminRoutes.js +345 -0
  122. package/routes/survivorRoutes.js +756 -0
  123. package/routes/uploadRoutes.js +256 -0
  124. package/routes/userProfileRoutes.js +244 -0
  125. package/routes/whatsNewRoutes.js +331 -0
  126. package/scripts/.claude/settings.local.json +15 -0
  127. package/scripts/README.md +170 -0
  128. package/scripts/RESTART_EVERYTHING.sh +104 -0
  129. package/scripts/add-claim-columns.sql +48 -0
  130. package/scripts/add-crypto-prices-cache.sql +27 -0
  131. package/scripts/add-exchange-rates-cache.sql +40 -0
  132. package/scripts/add-game-invite-column.sql +23 -0
  133. package/scripts/add-game-invite-notification.sql +33 -0
  134. package/scripts/add-game-invite-telegram-pref.sql +16 -0
  135. package/scripts/add-game-joined-notification.sql +16 -0
  136. package/scripts/add-game-joined-pref.js +40 -0
  137. package/scripts/add-game-joined-preference.sql +6 -0
  138. package/scripts/add-game-start-notifications.sql +41 -0
  139. package/scripts/add-notification-flags-to-games.sql +55 -0
  140. package/scripts/add-pending-game-dismissals.sql +19 -0
  141. package/scripts/add-preferred-currency.sql +34 -0
  142. package/scripts/add-winner-columns.js +61 -0
  143. package/scripts/add_mention_system.sql +53 -0
  144. package/scripts/add_payment_system.sql +96 -0
  145. package/scripts/add_sports_event_id_column.sql +22 -0
  146. package/scripts/analyze-cohort-data-heroku.js +276 -0
  147. package/scripts/analyze-cohort-data.js +295 -0
  148. package/scripts/analyze-prod-cohorts.sh +10 -0
  149. package/scripts/backfill-matchup-images.js +245 -0
  150. package/scripts/backfill-missing-signatures.js +175 -0
  151. package/scripts/backfill-referral-earnings.js +202 -0
  152. package/scripts/check-chat-schema.js +130 -0
  153. package/scripts/check-db.sh +14 -0
  154. package/scripts/check_oracle_in_game.js +54 -0
  155. package/scripts/cleanup-database.js +193 -0
  156. package/scripts/clear-notification-cache.js +85 -0
  157. package/scripts/convert-mnemonic.js +50 -0
  158. package/scripts/create-users-table.sql +44 -0
  159. package/scripts/debug-cohort-counts.js +248 -0
  160. package/scripts/debug-winner-calc.js +84 -0
  161. package/scripts/deploy-payment-system.sh +118 -0
  162. package/scripts/deploy-to-heroku.sh +63 -0
  163. package/scripts/diagnose-locked-round.js +143 -0
  164. package/scripts/dubs-cli.js +720 -0
  165. package/scripts/dump-account.js +65 -0
  166. package/scripts/find-vrf-offset.js +48 -0
  167. package/scripts/fix-chat-notifications-constraint.sql +122 -0
  168. package/scripts/fix-claim-columns.js +124 -0
  169. package/scripts/fix-constraint-now.js +44 -0
  170. package/scripts/fix-lock-timestamps.js +96 -0
  171. package/scripts/fix-locked-round.sh +126 -0
  172. package/scripts/fix-missing-badges.sql +91 -0
  173. package/scripts/fix-payment-notifications.sql +41 -0
  174. package/scripts/force-new-round.js +55 -0
  175. package/scripts/force-resolve-and-claim.js +278 -0
  176. package/scripts/important/README.md +115 -0
  177. package/scripts/important/authority-force-lock.js +197 -0
  178. package/scripts/important/authority-resolve-game.js +267 -0
  179. package/scripts/important/check-game-status.js +373 -0
  180. package/scripts/important/list-pending-games-by-version.js +270 -0
  181. package/scripts/important/reconcile-v1-v2-payouts.js +270 -0
  182. package/scripts/initialize-jackpot.js +111 -0
  183. package/scripts/jackpot/.claude/settings.local.json +10 -0
  184. package/scripts/jackpot/force-reset.js +84 -0
  185. package/scripts/jackpot/initialize-mainnet.js +100 -0
  186. package/scripts/jackpot/keeper.js +742 -0
  187. package/scripts/jackpot/status.js +107 -0
  188. package/scripts/jackpot/update-round-duration.js +143 -0
  189. package/scripts/keeper-bot.js +112 -0
  190. package/scripts/list-pending-games.js +131 -0
  191. package/scripts/migrate-chat-v2.js +127 -0
  192. package/scripts/migrate-chat-winners.js +84 -0
  193. package/scripts/migrate-chat.sh +17 -0
  194. package/scripts/migrate-game-invite.js +83 -0
  195. package/scripts/migrate-heroku-game-notifications.sh +159 -0
  196. package/scripts/migrations/001_analytics_tables.sql +422 -0
  197. package/scripts/migrations/002_add_matchup_image_url.sql +14 -0
  198. package/scripts/migrations/003_referral_earnings.sql +208 -0
  199. package/scripts/migrations/004_add_whats_new_notification_type.sql +62 -0
  200. package/scripts/migrations/005_add_connect4_your_turn_notification.sql +61 -0
  201. package/scripts/migrations/005_push_notifications.sql +55 -0
  202. package/scripts/migrations/006_add_draw_team_players.sql +28 -0
  203. package/scripts/migrations/006_add_game_cancelled_notification.sql +62 -0
  204. package/scripts/migrations/007_add_gif_url.sql +8 -0
  205. package/scripts/migrations/008_add_connect4_columns.sql +139 -0
  206. package/scripts/migrations/008_add_pool_tracking.sql +22 -0
  207. package/scripts/migrations/009_create_survivor_pool_tables.sql +174 -0
  208. package/scripts/migrations/010_add_survivor_pool_outcome.sql +28 -0
  209. package/scripts/migrations/011_create_developer_tables.sql +67 -0
  210. package/scripts/migrations/011_fix_keeper_tables.sql +85 -0
  211. package/scripts/migrations/012_create_developer_webhooks.sql +31 -0
  212. package/scripts/migrations/013_add_network_mode.sql +18 -0
  213. package/scripts/migrations/014_create_developer_app_users.sql +19 -0
  214. package/scripts/migrations/015_add_ui_config.sql +4 -0
  215. package/scripts/migrations/016_add_resolution_secret.sql +4 -0
  216. package/scripts/migrations/017_add_external_game_id.sql +3 -0
  217. package/scripts/migrations/018_create_pickem_tables.sql +115 -0
  218. package/scripts/migrations/019_expo_push_tokens.sql +19 -0
  219. package/scripts/migrations/create_whats_new_tables.sql +88 -0
  220. package/scripts/migrations/drop_live_games_tables.sql +34 -0
  221. package/scripts/open-jackpot-round.js +85 -0
  222. package/scripts/purge-all-data.sh +329 -0
  223. package/scripts/purge-all-data.sql +142 -0
  224. package/scripts/purge-heroku-data.sh +149 -0
  225. package/scripts/purge-heroku-data.sql +62 -0
  226. package/scripts/rebuild-heroku-database.sh +113 -0
  227. package/scripts/recover-funds.js +357 -0
  228. package/scripts/regenerate-epl-images.js +278 -0
  229. package/scripts/resize-s3-matchup-images.js +374 -0
  230. package/scripts/resolve-direct.js +88 -0
  231. package/scripts/resolve-mock-game.js +124 -0
  232. package/scripts/resolve-pickem-game.js +55 -0
  233. package/scripts/resolve-round-manual.js +83 -0
  234. package/scripts/resolve-stuck-game.js +382 -0
  235. package/scripts/resolve-stuck-round.js +42 -0
  236. package/scripts/run-connect4-migration.sh +16 -0
  237. package/scripts/run-mention-migration.sh +32 -0
  238. package/scripts/run-payment-migration.sh +51 -0
  239. package/scripts/run-preferred-currency-migration.sh +31 -0
  240. package/scripts/run-referral-earnings-migration.sh +32 -0
  241. package/scripts/run-survivor-outcome-migration.sh +16 -0
  242. package/scripts/seed-test-users.js +346 -0
  243. package/scripts/setup-auth-tables.js +78 -0
  244. package/scripts/setup-complete-database.sql +992 -0
  245. package/scripts/setup-database-fresh.sh +359 -0
  246. package/scripts/setup-heroku-keeper.sh +48 -0
  247. package/scripts/setup-keeper-database.js +83 -0
  248. package/scripts/setup-keeper-state-db.sql +110 -0
  249. package/scripts/setup-oracle.sh +39 -0
  250. package/scripts/setup-pnl-tracking.js +111 -0
  251. package/scripts/start-devnet.sh +14 -0
  252. package/scripts/test-arcade-devnet.sh +160 -0
  253. package/scripts/test-arcade-match.sh +109 -0
  254. package/scripts/test-automatic-mode.sh +239 -0
  255. package/scripts/test-connect4-cancel-claim.js +370 -0
  256. package/scripts/test-connect4-e2e.js +369 -0
  257. package/scripts/test-connect4-resolve.js +369 -0
  258. package/scripts/test-game-state-endpoint.js +136 -0
  259. package/scripts/test-invite-notification.js +86 -0
  260. package/scripts/test-jackpot-api.sh +71 -0
  261. package/scripts/test-poll-confirmation.js +267 -0
  262. package/scripts/test-resolve-game.js +271 -0
  263. package/scripts/test-resolve-signature.js +223 -0
  264. package/scripts/test-signature-preservation.js +124 -0
  265. package/scripts/test-state-machine.js +291 -0
  266. package/scripts/test-webhook-receiver.js +60 -0
  267. package/scripts/update-notification-constraint.js +52 -0
  268. package/scripts/verify-account-layout.js +145 -0
  269. package/scripts/verify-winner-algorithm.js +278 -0
  270. package/server.js +5259 -0
  271. package/services/arcadeMatchService.js +763 -0
  272. package/services/automaticGameOracle.js +1596 -0
  273. package/services/chatService.js +1612 -0
  274. package/services/connect4GameService.js +1049 -0
  275. package/services/connect4NotificationService.js +374 -0
  276. package/services/cryptoPriceService.js +223 -0
  277. package/services/customGameResolver.js +260 -0
  278. package/services/db.js +79 -0
  279. package/services/directMessageService.js +389 -0
  280. package/services/discordNotifications.js +160 -0
  281. package/services/exchangeRateService.js +289 -0
  282. package/services/expoPushService.js +314 -0
  283. package/services/gamesCacheService.js +539 -0
  284. package/services/jackpotHistory.js +331 -0
  285. package/services/jackpotService.js +856 -0
  286. package/services/keeperStateService.js +355 -0
  287. package/services/matchupImageService.js +591 -0
  288. package/services/notificationCacheService.js +407 -0
  289. package/services/pickemOracle.js +440 -0
  290. package/services/playerStatsService.js +389 -0
  291. package/services/portfolioService.js +555 -0
  292. package/services/promoService.js +757 -0
  293. package/services/promoTreasuryService.js +239 -0
  294. package/services/pushNotifications.js +353 -0
  295. package/services/redisService.js +422 -0
  296. package/services/referralEarningsService.js +728 -0
  297. package/services/s3Service.js +396 -0
  298. package/services/socialService.js +1202 -0
  299. package/services/survivorOracle.js +469 -0
  300. package/services/survivorSimulator.js +475 -0
  301. package/services/telegramNotifications.js +461 -0
  302. package/services/userProfileStatsService.js +1185 -0
  303. package/services/whatsNewService.js +388 -0
  304. package/utils/urlHelper.js +95 -0
@@ -0,0 +1,329 @@
1
+ #!/bin/bash
2
+
3
+ # ============================================
4
+ # 🎮 DUBS SERVER - PURGE ALL DATA
5
+ # ============================================
6
+ # This script removes ALL data from ALL tables
7
+ # ⚠️ WARNING: This is DESTRUCTIVE and IRREVERSIBLE!
8
+ # Schema (table structure) is preserved, only data is deleted
9
+
10
+ set -e # Exit on error
11
+
12
+ # Colors for output
13
+ RED='\033[0;31m'
14
+ YELLOW='\033[1;33m'
15
+ GREEN='\033[0;32m'
16
+ BLUE='\033[0;34m'
17
+ NC='\033[0m' # No Color
18
+
19
+ DB_NAME="${DB_NAME:-dubs_db}"
20
+
21
+ echo "╔════════════════════════════════════════════════╗"
22
+ echo "║ ⚠️ PURGE ALL DATA - WARNING! ⚠️ ║"
23
+ echo "╚════════════════════════════════════════════════╝"
24
+ echo ""
25
+
26
+ echo -e "${RED}⚠️ THIS WILL DELETE ALL DATA FROM ALL TABLES!${NC}"
27
+ echo -e "${YELLOW}This action is IRREVERSIBLE!${NC}"
28
+ echo ""
29
+ echo "Database: $DB_NAME"
30
+ echo ""
31
+ echo "This will remove:"
32
+ echo " • All user accounts and sessions"
33
+ echo " • All chat messages, notifications, and payments"
34
+ echo " • All friend relationships"
35
+ echo " • All player stats and history"
36
+ echo " • All jackpot rounds and keeper data"
37
+ echo " • All referral earnings and payout batches"
38
+ echo " • All What's New posts and read tracking"
39
+ echo " • All promo codes and reservations"
40
+ echo " • All developer accounts, apps, API keys, and webhooks"
41
+ echo " • Everything else in the database"
42
+ echo ""
43
+ echo -e "${BLUE}The table structure will remain intact (safe for re-use)${NC}"
44
+ echo ""
45
+
46
+ # Confirmation 1
47
+ read -p "Are you ABSOLUTELY sure you want to purge all data? (type 'yes' to confirm): " -r
48
+ echo ""
49
+
50
+ if [[ ! $REPLY == "yes" ]]; then
51
+ echo -e "${GREEN}✅ Cancelled. No data was deleted.${NC}"
52
+ exit 0
53
+ fi
54
+
55
+ # Confirmation 2 (extra safety)
56
+ echo -e "${RED}FINAL WARNING: This cannot be undone!${NC}"
57
+ read -p "Type the database name '$DB_NAME' to proceed: " -r
58
+ echo ""
59
+
60
+ if [[ ! $REPLY == "$DB_NAME" ]]; then
61
+ echo -e "${GREEN}✅ Cancelled. No data was deleted.${NC}"
62
+ exit 0
63
+ fi
64
+
65
+ echo ""
66
+ echo "🗑️ Purging all data..."
67
+ echo ""
68
+
69
+ # Check if database exists
70
+ if ! psql -lqt | cut -d \| -f 1 | grep -qw $DB_NAME; then
71
+ echo -e "${RED}❌ Database '$DB_NAME' does not exist${NC}"
72
+ exit 1
73
+ fi
74
+
75
+ # Count records before deletion
76
+ echo "📊 Counting records before deletion..."
77
+ TOTAL_BEFORE=$(psql -d $DB_NAME -t -c "
78
+ SELECT
79
+ (SELECT COUNT(*) FROM users) +
80
+ (SELECT COUNT(*) FROM chat_messages) +
81
+ (SELECT COUNT(*) FROM chat_payments) +
82
+ (SELECT COUNT(*) FROM player_stats) +
83
+ (SELECT COUNT(*) FROM jackpot_rounds) +
84
+ (SELECT COUNT(*) FROM user_sessions) +
85
+ (SELECT COUNT(*) FROM auth_nonces) +
86
+ (SELECT COUNT(*) FROM chat_notifications) +
87
+ (SELECT COUNT(*) FROM friends) +
88
+ (SELECT COUNT(*) FROM player_history) +
89
+ (SELECT COUNT(*) FROM keeper_rounds) +
90
+ (SELECT COUNT(*) FROM referral_earnings) +
91
+ (SELECT COUNT(*) FROM referral_payout_batches) +
92
+ (SELECT COUNT(*) FROM whats_new_posts) +
93
+ (SELECT COUNT(*) FROM user_whats_new_reads) +
94
+ (SELECT COUNT(*) FROM promo_codes) +
95
+ (SELECT COUNT(*) FROM developer_accounts) +
96
+ (SELECT COUNT(*) FROM developer_apps) +
97
+ (SELECT COUNT(*) FROM developer_api_keys) +
98
+ (SELECT COUNT(*) FROM developer_game_attributions) +
99
+ (SELECT COUNT(*) FROM developer_api_logs) +
100
+ (SELECT COUNT(*) FROM developer_webhooks) +
101
+ (SELECT COUNT(*) FROM developer_webhook_logs) +
102
+ (SELECT COUNT(*) FROM developer_app_users)
103
+ " 2>/dev/null || echo "0")
104
+
105
+ echo "Total records: $(echo $TOTAL_BEFORE | xargs)"
106
+ echo ""
107
+
108
+ # Execute purge
109
+ echo "🗑️ Deleting all data..."
110
+
111
+ psql -d $DB_NAME << 'EOF'
112
+ -- Disable triggers for faster deletion
113
+ SET session_replication_role = 'replica';
114
+
115
+ -- Truncate all tables (CASCADE handles foreign keys)
116
+ -- Chat & Messaging
117
+ TRUNCATE TABLE chat_payments CASCADE;
118
+ TRUNCATE TABLE chat_notifications CASCADE;
119
+ TRUNCATE TABLE message_mentions CASCADE;
120
+ TRUNCATE TABLE chat_reactions CASCADE;
121
+ TRUNCATE TABLE chat_messages CASCADE;
122
+ TRUNCATE TABLE direct_messages CASCADE;
123
+
124
+ -- Social & Relationships
125
+ TRUNCATE TABLE user_relationships CASCADE;
126
+ TRUNCATE TABLE friend_requests CASCADE;
127
+ TRUNCATE TABLE friends CASCADE;
128
+ TRUNCATE TABLE group_members CASCADE;
129
+ TRUNCATE TABLE groups CASCADE;
130
+
131
+ -- Games V1
132
+ TRUNCATE TABLE user_game_refs CASCADE;
133
+ TRUNCATE TABLE games CASCADE;
134
+
135
+ -- Games V2 (DROP entirely - no longer needed)
136
+ DROP TABLE IF EXISTS positions_v2 CASCADE;
137
+ DROP TABLE IF EXISTS games_v2 CASCADE;
138
+ DROP TABLE IF EXISTS referral_earnings_v2 CASCADE;
139
+
140
+ -- Live Games (DROP entirely - no longer needed)
141
+ DROP TABLE IF EXISTS live_game_plays CASCADE;
142
+ DROP TABLE IF EXISTS live_game_polling_log CASCADE;
143
+ DROP TABLE IF EXISTS live_game_stats CASCADE;
144
+ DROP TABLE IF EXISTS live_game_subscriptions CASCADE;
145
+ DROP TABLE IF EXISTS live_games CASCADE;
146
+
147
+ -- Player Data
148
+ TRUNCATE TABLE audit_logs CASCADE;
149
+ TRUNCATE TABLE player_history CASCADE;
150
+ TRUNCATE TABLE player_stats CASCADE;
151
+ TRUNCATE TABLE sports_betting_stats CASCADE;
152
+ TRUNCATE TABLE user_badges CASCADE;
153
+ TRUNCATE TABLE pending_game_dismissals CASCADE;
154
+
155
+ -- Notifications & Settings
156
+ TRUNCATE TABLE telegram_notification_preferences CASCADE;
157
+ TRUNCATE TABLE push_notification_preferences CASCADE;
158
+ TRUNCATE TABLE push_subscriptions CASCADE;
159
+ TRUNCATE TABLE device_settings CASCADE;
160
+
161
+ -- Auth & Sessions
162
+ TRUNCATE TABLE auth_nonces CASCADE;
163
+ TRUNCATE TABLE user_sessions CASCADE;
164
+
165
+ -- Keeper & Jackpot
166
+ TRUNCATE TABLE keeper_actions CASCADE;
167
+ TRUNCATE TABLE keeper_health CASCADE;
168
+ TRUNCATE TABLE keeper_rounds CASCADE;
169
+ TRUNCATE TABLE jackpot_rounds CASCADE;
170
+
171
+ -- Referrals
172
+ TRUNCATE TABLE referral_earnings CASCADE;
173
+ TRUNCATE TABLE referral_payout_batches CASCADE;
174
+
175
+ -- What's New
176
+ TRUNCATE TABLE user_whats_new_reads CASCADE;
177
+ TRUNCATE TABLE whats_new_posts CASCADE;
178
+
179
+ -- Promo & Cache
180
+ TRUNCATE TABLE promo_codes CASCADE;
181
+ TRUNCATE TABLE crypto_prices_cache CASCADE;
182
+ TRUNCATE TABLE exchange_rates_cache CASCADE;
183
+
184
+ -- Developer Platform
185
+ TRUNCATE TABLE developer_app_users CASCADE;
186
+ TRUNCATE TABLE developer_webhook_logs CASCADE;
187
+ TRUNCATE TABLE developer_webhooks CASCADE;
188
+ TRUNCATE TABLE developer_api_logs CASCADE;
189
+ TRUNCATE TABLE developer_game_attributions CASCADE;
190
+ TRUNCATE TABLE developer_api_keys CASCADE;
191
+ TRUNCATE TABLE developer_apps CASCADE;
192
+ TRUNCATE TABLE developer_accounts CASCADE;
193
+
194
+ -- Users (last due to foreign keys)
195
+ TRUNCATE TABLE users CASCADE;
196
+
197
+ -- Re-enable triggers
198
+ SET session_replication_role = 'origin';
199
+
200
+ -- Reset sequences (auto-increment IDs back to 1)
201
+ -- Chat & Messaging
202
+ ALTER SEQUENCE chat_payments_id_seq RESTART WITH 1;
203
+ ALTER SEQUENCE chat_messages_id_seq RESTART WITH 1;
204
+ ALTER SEQUENCE chat_reactions_id_seq RESTART WITH 1;
205
+ ALTER SEQUENCE chat_notifications_id_seq RESTART WITH 1;
206
+ ALTER SEQUENCE message_mentions_id_seq RESTART WITH 1;
207
+ ALTER SEQUENCE direct_messages_id_seq RESTART WITH 1;
208
+
209
+ -- Social & Relationships
210
+ ALTER SEQUENCE user_relationships_id_seq RESTART WITH 1;
211
+ ALTER SEQUENCE friends_id_seq RESTART WITH 1;
212
+ ALTER SEQUENCE friend_requests_id_seq RESTART WITH 1;
213
+ ALTER SEQUENCE groups_id_seq RESTART WITH 1;
214
+ ALTER SEQUENCE group_members_id_seq RESTART WITH 1;
215
+
216
+ -- Games V1
217
+ ALTER SEQUENCE games_id_seq RESTART WITH 1;
218
+ ALTER SEQUENCE user_game_refs_id_seq RESTART WITH 1;
219
+
220
+ -- Games V2 sequences dropped with tables
221
+
222
+ -- Live Games sequences dropped with tables
223
+
224
+ -- Player Data
225
+ ALTER SEQUENCE audit_logs_id_seq RESTART WITH 1;
226
+ ALTER SEQUENCE player_history_id_seq RESTART WITH 1;
227
+ ALTER SEQUENCE user_badges_id_seq RESTART WITH 1;
228
+ ALTER SEQUENCE pending_game_dismissals_id_seq RESTART WITH 1;
229
+
230
+ -- Notifications & Settings
231
+ ALTER SEQUENCE push_subscriptions_id_seq RESTART WITH 1;
232
+ ALTER SEQUENCE device_settings_id_seq RESTART WITH 1;
233
+
234
+ -- Auth & Sessions
235
+ ALTER SEQUENCE user_sessions_id_seq RESTART WITH 1;
236
+
237
+ -- Keeper & Jackpot
238
+ ALTER SEQUENCE keeper_actions_id_seq RESTART WITH 1;
239
+ ALTER SEQUENCE keeper_health_id_seq RESTART WITH 1;
240
+ ALTER SEQUENCE keeper_rounds_id_seq RESTART WITH 1;
241
+ ALTER SEQUENCE jackpot_rounds_id_seq RESTART WITH 1;
242
+
243
+ -- Referrals
244
+ ALTER SEQUENCE referral_earnings_id_seq RESTART WITH 1;
245
+ ALTER SEQUENCE referral_payout_batches_id_seq RESTART WITH 1;
246
+
247
+ -- What's New
248
+ ALTER SEQUENCE whats_new_posts_id_seq RESTART WITH 1;
249
+ ALTER SEQUENCE user_whats_new_reads_id_seq RESTART WITH 1;
250
+
251
+ -- Promo & Cache
252
+ ALTER SEQUENCE promo_codes_id_seq RESTART WITH 1;
253
+ ALTER SEQUENCE crypto_prices_cache_id_seq RESTART WITH 1;
254
+ ALTER SEQUENCE exchange_rates_cache_id_seq RESTART WITH 1;
255
+
256
+ -- Developer Platform
257
+ ALTER SEQUENCE developer_webhook_logs_id_seq RESTART WITH 1;
258
+ ALTER SEQUENCE developer_webhooks_id_seq RESTART WITH 1;
259
+ ALTER SEQUENCE developer_api_logs_id_seq RESTART WITH 1;
260
+ ALTER SEQUENCE developer_game_attributions_id_seq RESTART WITH 1;
261
+ ALTER SEQUENCE developer_api_keys_id_seq RESTART WITH 1;
262
+ ALTER SEQUENCE developer_apps_id_seq RESTART WITH 1;
263
+ ALTER SEQUENCE developer_accounts_id_seq RESTART WITH 1;
264
+
265
+ -- Users
266
+ ALTER SEQUENCE users_id_seq RESTART WITH 1;
267
+ EOF
268
+
269
+ if [ $? -eq 0 ]; then
270
+ echo ""
271
+ echo -e "${GREEN}✅ All data has been deleted${NC}"
272
+ echo ""
273
+
274
+ # Verify deletion
275
+ echo "📊 Verifying deletion..."
276
+
277
+ TABLE_COUNT=$(psql -d $DB_NAME -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE';" | xargs)
278
+
279
+ TOTAL_AFTER=$(psql -d $DB_NAME -t -c "
280
+ SELECT
281
+ (SELECT COUNT(*) FROM users) +
282
+ (SELECT COUNT(*) FROM chat_messages) +
283
+ (SELECT COUNT(*) FROM chat_payments) +
284
+ (SELECT COUNT(*) FROM player_stats) +
285
+ (SELECT COUNT(*) FROM jackpot_rounds) +
286
+ (SELECT COUNT(*) FROM user_sessions) +
287
+ (SELECT COUNT(*) FROM auth_nonces) +
288
+ (SELECT COUNT(*) FROM referral_earnings) +
289
+ (SELECT COUNT(*) FROM referral_payout_batches) +
290
+ (SELECT COUNT(*) FROM whats_new_posts) +
291
+ (SELECT COUNT(*) FROM user_whats_new_reads) +
292
+ (SELECT COUNT(*) FROM promo_codes) +
293
+ (SELECT COUNT(*) FROM developer_accounts) +
294
+ (SELECT COUNT(*) FROM developer_apps) +
295
+ (SELECT COUNT(*) FROM developer_api_keys) +
296
+ (SELECT COUNT(*) FROM developer_game_attributions) +
297
+ (SELECT COUNT(*) FROM developer_api_logs) +
298
+ (SELECT COUNT(*) FROM developer_webhooks) +
299
+ (SELECT COUNT(*) FROM developer_webhook_logs) +
300
+ (SELECT COUNT(*) FROM developer_app_users)
301
+ " | xargs)
302
+
303
+ echo "Tables still exist: $TABLE_COUNT"
304
+ echo "Records remaining: $TOTAL_AFTER"
305
+ echo ""
306
+
307
+ if [ "$TOTAL_AFTER" -eq 0 ]; then
308
+ echo -e "${GREEN}✅ Verification successful - all data removed${NC}"
309
+ else
310
+ echo -e "${YELLOW}⚠️ Warning: Some data may still exist${NC}"
311
+ fi
312
+
313
+ echo ""
314
+ echo "╔════════════════════════════════════════════════╗"
315
+ echo "║ ✅ PURGE COMPLETE ✅ ║"
316
+ echo "╚════════════════════════════════════════════════╝"
317
+ echo ""
318
+ echo "Database: $DB_NAME"
319
+ echo "Status: Empty (structure intact)"
320
+ echo "Ready for: Fresh data"
321
+ echo ""
322
+ echo "💡 The database is now clean and ready to use!"
323
+ echo ""
324
+ else
325
+ echo ""
326
+ echo -e "${RED}❌ Error occurred during purge${NC}"
327
+ exit 1
328
+ fi
329
+
@@ -0,0 +1,142 @@
1
+ -- ============================================
2
+ -- 🎮 DUBS SERVER - PURGE ALL DATA (SQL)
3
+ -- ============================================
4
+ -- This SQL script removes ALL data from ALL tables
5
+ -- ⚠️ WARNING: This is DESTRUCTIVE and IRREVERSIBLE!
6
+ -- Schema (table structure) is preserved
7
+ --
8
+ -- Usage: psql -d dubs_db -f scripts/purge-all-data.sql
9
+
10
+ \echo '⚠️ WARNING: This will delete ALL data from ALL tables!'
11
+ \echo 'Press Ctrl+C now to cancel, or press Enter to continue...'
12
+ \prompt 'Type YES to confirm: ' confirmation
13
+
14
+ -- Only proceed if confirmed (this won't actually work in psql, it's just documentation)
15
+ -- Use the bash script for interactive confirmation
16
+
17
+ \echo ''
18
+ \echo '🗑️ Purging all data...'
19
+ \echo ''
20
+
21
+ -- Disable triggers for faster deletion
22
+ SET session_replication_role = 'replica';
23
+
24
+ -- Truncate all tables (CASCADE handles foreign keys)
25
+ -- Order doesn't matter with CASCADE, but listing in logical order
26
+
27
+ \echo 'Deleting chat data...'
28
+ TRUNCATE TABLE chat_notifications CASCADE;
29
+ TRUNCATE TABLE chat_reactions CASCADE;
30
+ TRUNCATE TABLE chat_messages CASCADE;
31
+ TRUNCATE TABLE user_relationships CASCADE;
32
+
33
+ \echo 'Deleting social data...'
34
+ TRUNCATE TABLE friend_requests CASCADE;
35
+ TRUNCATE TABLE friends CASCADE;
36
+ TRUNCATE TABLE group_members CASCADE;
37
+ TRUNCATE TABLE groups CASCADE;
38
+
39
+ \echo 'Deleting player data...'
40
+ TRUNCATE TABLE player_history CASCADE;
41
+ TRUNCATE TABLE player_stats CASCADE;
42
+ TRUNCATE TABLE user_badges CASCADE;
43
+
44
+ \echo 'Deleting auth data...'
45
+ TRUNCATE TABLE auth_nonces CASCADE;
46
+ TRUNCATE TABLE user_sessions CASCADE;
47
+
48
+ \echo 'Deleting jackpot data...'
49
+ TRUNCATE TABLE keeper_actions CASCADE;
50
+ TRUNCATE TABLE keeper_health CASCADE;
51
+ TRUNCATE TABLE keeper_rounds CASCADE;
52
+ TRUNCATE TABLE jackpot_rounds CASCADE;
53
+
54
+ \echo 'Deleting developer data...'
55
+ TRUNCATE TABLE developer_webhook_logs CASCADE;
56
+ TRUNCATE TABLE developer_webhooks CASCADE;
57
+ TRUNCATE TABLE developer_api_logs CASCADE;
58
+ TRUNCATE TABLE developer_game_attributions CASCADE;
59
+ TRUNCATE TABLE developer_api_keys CASCADE;
60
+ TRUNCATE TABLE developer_apps CASCADE;
61
+ TRUNCATE TABLE developer_accounts CASCADE;
62
+
63
+ \echo 'Deleting users...'
64
+ TRUNCATE TABLE users CASCADE;
65
+
66
+ -- Re-enable triggers
67
+ SET session_replication_role = 'origin';
68
+
69
+ \echo ''
70
+ \echo 'Resetting ID sequences...'
71
+
72
+ -- Reset sequences (auto-increment IDs back to 1)
73
+ ALTER SEQUENCE IF EXISTS chat_messages_id_seq RESTART WITH 1;
74
+ ALTER SEQUENCE IF EXISTS chat_reactions_id_seq RESTART WITH 1;
75
+ ALTER SEQUENCE IF EXISTS chat_notifications_id_seq RESTART WITH 1;
76
+ ALTER SEQUENCE IF EXISTS user_relationships_id_seq RESTART WITH 1;
77
+ ALTER SEQUENCE IF EXISTS friends_id_seq RESTART WITH 1;
78
+ ALTER SEQUENCE IF EXISTS friend_requests_id_seq RESTART WITH 1;
79
+ ALTER SEQUENCE IF EXISTS groups_id_seq RESTART WITH 1;
80
+ ALTER SEQUENCE IF EXISTS group_members_id_seq RESTART WITH 1;
81
+ ALTER SEQUENCE IF EXISTS player_history_id_seq RESTART WITH 1;
82
+ ALTER SEQUENCE IF EXISTS user_badges_id_seq RESTART WITH 1;
83
+ ALTER SEQUENCE IF EXISTS user_sessions_id_seq RESTART WITH 1;
84
+ ALTER SEQUENCE IF EXISTS keeper_actions_id_seq RESTART WITH 1;
85
+ ALTER SEQUENCE IF EXISTS keeper_health_id_seq RESTART WITH 1;
86
+ ALTER SEQUENCE IF EXISTS keeper_rounds_id_seq RESTART WITH 1;
87
+ ALTER SEQUENCE IF EXISTS jackpot_rounds_id_seq RESTART WITH 1;
88
+ ALTER SEQUENCE IF EXISTS developer_webhook_logs_id_seq RESTART WITH 1;
89
+ ALTER SEQUENCE IF EXISTS developer_webhooks_id_seq RESTART WITH 1;
90
+ ALTER SEQUENCE IF EXISTS developer_api_logs_id_seq RESTART WITH 1;
91
+ ALTER SEQUENCE IF EXISTS developer_game_attributions_id_seq RESTART WITH 1;
92
+ ALTER SEQUENCE IF EXISTS developer_api_keys_id_seq RESTART WITH 1;
93
+ ALTER SEQUENCE IF EXISTS developer_apps_id_seq RESTART WITH 1;
94
+ ALTER SEQUENCE IF EXISTS developer_accounts_id_seq RESTART WITH 1;
95
+ ALTER SEQUENCE IF EXISTS users_id_seq RESTART WITH 1;
96
+
97
+ \echo ''
98
+ \echo '✅ All data has been deleted'
99
+ \echo '📊 Verifying deletion...'
100
+ \echo ''
101
+
102
+ -- Show table counts
103
+ SELECT
104
+ 'users' as table_name,
105
+ COUNT(*) as records
106
+ FROM users
107
+ UNION ALL
108
+ SELECT 'chat_messages', COUNT(*) FROM chat_messages
109
+ UNION ALL
110
+ SELECT 'player_stats', COUNT(*) FROM player_stats
111
+ UNION ALL
112
+ SELECT 'jackpot_rounds', COUNT(*) FROM jackpot_rounds
113
+ UNION ALL
114
+ SELECT 'user_sessions', COUNT(*) FROM user_sessions
115
+ UNION ALL
116
+ SELECT 'auth_nonces', COUNT(*) FROM auth_nonces
117
+ UNION ALL
118
+ SELECT 'friends', COUNT(*) FROM friends
119
+ UNION ALL
120
+ SELECT 'chat_notifications', COUNT(*) FROM chat_notifications
121
+ UNION ALL
122
+ SELECT 'developer_accounts', COUNT(*) FROM developer_accounts
123
+ UNION ALL
124
+ SELECT 'developer_apps', COUNT(*) FROM developer_apps
125
+ UNION ALL
126
+ SELECT 'developer_webhooks', COUNT(*) FROM developer_webhooks
127
+ ORDER BY table_name;
128
+
129
+ \echo ''
130
+ \echo '🎉 Purge complete! Database is now empty.'
131
+ \echo ''
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
@@ -0,0 +1,149 @@
1
+ #!/bin/bash
2
+
3
+ # ============================================
4
+ # 🎮 DUBS SERVER - PURGE HEROKU DATABASE
5
+ # ============================================
6
+ # This script removes ALL data from ALL tables on Heroku
7
+ # ⚠️ WARNING: This is DESTRUCTIVE and IRREVERSIBLE!
8
+ # Schema (table structure) is preserved, only data is deleted
9
+
10
+ set -e # Exit on error
11
+
12
+ # Colors for output
13
+ RED='\033[0;31m'
14
+ YELLOW='\033[1;33m'
15
+ GREEN='\033[0;32m'
16
+ BLUE='\033[0;34m'
17
+ NC='\033[0m' # No Color
18
+
19
+ APP_NAME="${APP_NAME:-dubs-server-dev}"
20
+
21
+ echo "╔════════════════════════════════════════════════╗"
22
+ echo "║ ⚠️ PURGE HEROKU DATA - WARNING! ⚠️ ║"
23
+ echo "╚════════════════════════════════════════════════╝"
24
+ echo ""
25
+
26
+ echo -e "${RED}⚠️ THIS WILL DELETE ALL DATA FROM HEROKU DATABASE!${NC}"
27
+ echo -e "${YELLOW}This action is IRREVERSIBLE!${NC}"
28
+ echo ""
29
+ echo "Heroku App: $APP_NAME"
30
+ echo ""
31
+ echo "This will remove:"
32
+ echo " • All user accounts and sessions"
33
+ echo " • All chat messages and notifications"
34
+ echo " • All friend relationships"
35
+ echo " • All games and game references"
36
+ echo " • All player stats and history"
37
+ echo " • All jackpot rounds and keeper data"
38
+ echo " • Everything else in the database"
39
+ echo ""
40
+ echo -e "${BLUE}The table structure will remain intact (safe for re-use)${NC}"
41
+ echo ""
42
+
43
+ # Confirmation 1
44
+ read -p "Are you ABSOLUTELY sure you want to purge Heroku data? (type 'yes' to confirm): " -r
45
+ echo ""
46
+
47
+ if [[ ! $REPLY == "yes" ]]; then
48
+ echo -e "${GREEN}✅ Cancelled. No data was deleted.${NC}"
49
+ exit 0
50
+ fi
51
+
52
+ # Confirmation 2 (extra safety)
53
+ echo -e "${RED}FINAL WARNING: This cannot be undone!${NC}"
54
+ read -p "Type the app name '$APP_NAME' to proceed: " -r
55
+ echo ""
56
+
57
+ if [[ ! $REPLY == "$APP_NAME" ]]; then
58
+ echo -e "${GREEN}✅ Cancelled. No data was deleted.${NC}"
59
+ exit 0
60
+ fi
61
+
62
+ echo ""
63
+ echo "🗑️ Purging all data from Heroku database..."
64
+ echo ""
65
+
66
+ # Execute purge using Heroku's psql
67
+ heroku pg:psql --app $APP_NAME << 'EOF'
68
+ -- Disable triggers for faster deletion
69
+ SET session_replication_role = 'replica';
70
+
71
+ -- Truncate all tables (CASCADE handles foreign keys)
72
+ TRUNCATE TABLE chat_notifications CASCADE;
73
+ TRUNCATE TABLE chat_reactions CASCADE;
74
+ TRUNCATE TABLE chat_messages CASCADE;
75
+ TRUNCATE TABLE user_relationships CASCADE;
76
+ TRUNCATE TABLE friend_requests CASCADE;
77
+ TRUNCATE TABLE friends CASCADE;
78
+ TRUNCATE TABLE group_members CASCADE;
79
+ TRUNCATE TABLE groups CASCADE;
80
+ TRUNCATE TABLE user_game_refs CASCADE;
81
+ TRUNCATE TABLE games CASCADE;
82
+ TRUNCATE TABLE audit_logs CASCADE;
83
+ TRUNCATE TABLE player_history CASCADE;
84
+ TRUNCATE TABLE player_stats CASCADE;
85
+ TRUNCATE TABLE user_badges CASCADE;
86
+ TRUNCATE TABLE telegram_notification_preferences CASCADE;
87
+ TRUNCATE TABLE auth_nonces CASCADE;
88
+ TRUNCATE TABLE user_sessions CASCADE;
89
+ TRUNCATE TABLE keeper_actions CASCADE;
90
+ TRUNCATE TABLE keeper_health CASCADE;
91
+ TRUNCATE TABLE keeper_rounds CASCADE;
92
+ TRUNCATE TABLE jackpot_rounds CASCADE;
93
+ TRUNCATE TABLE users CASCADE;
94
+
95
+ -- Re-enable triggers
96
+ SET session_replication_role = 'origin';
97
+
98
+ -- Reset sequences (auto-increment IDs back to 1)
99
+ DO $$
100
+ DECLARE
101
+ r RECORD;
102
+ BEGIN
103
+ FOR r IN (SELECT schemaname, sequencename FROM pg_sequences WHERE schemaname = 'public') LOOP
104
+ EXECUTE 'ALTER SEQUENCE ' || quote_ident(r.schemaname) || '.' || quote_ident(r.sequencename) || ' RESTART WITH 1;';
105
+ END LOOP;
106
+ END $$;
107
+
108
+ -- Show verification
109
+ SELECT 'Users' as table_name, COUNT(*) as records FROM users
110
+ UNION ALL
111
+ SELECT 'Games', COUNT(*) FROM games
112
+ UNION ALL
113
+ SELECT 'Chat Messages', COUNT(*) FROM chat_messages
114
+ UNION ALL
115
+ SELECT 'Player Stats', COUNT(*) FROM player_stats
116
+ UNION ALL
117
+ SELECT 'Jackpot Rounds', COUNT(*) FROM jackpot_rounds;
118
+ EOF
119
+
120
+ if [ $? -eq 0 ]; then
121
+ echo ""
122
+ echo -e "${GREEN}✅ All data has been deleted from Heroku${NC}"
123
+ echo ""
124
+ echo "╔════════════════════════════════════════════════╗"
125
+ echo "║ ✅ PURGE COMPLETE ✅ ║"
126
+ echo "╚════════════════════════════════════════════════╝"
127
+ echo ""
128
+ echo "Heroku App: $APP_NAME"
129
+ echo "Database Status: Empty (structure intact)"
130
+ echo "Ready for: Fresh data"
131
+ echo ""
132
+ echo "💡 The database is now clean and ready to use!"
133
+ echo ""
134
+ else
135
+ echo ""
136
+ echo -e "${RED}❌ Error occurred during purge${NC}"
137
+ exit 1
138
+ fi
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
@@ -0,0 +1,62 @@
1
+ -- ============================================
2
+ -- 🎮 DUBS SERVER - PURGE ALL HEROKU DATA
3
+ -- ============================================
4
+ -- This script removes ALL data from ALL tables
5
+ -- ⚠️ WARNING: This is DESTRUCTIVE and IRREVERSIBLE!
6
+ -- Schema (table structure) is preserved, only data is deleted
7
+
8
+ -- Disable triggers for faster deletion
9
+ SET session_replication_role = 'replica';
10
+
11
+ -- Truncate all tables (CASCADE handles foreign keys)
12
+ TRUNCATE TABLE chat_notifications CASCADE;
13
+ TRUNCATE TABLE chat_reactions CASCADE;
14
+ TRUNCATE TABLE chat_messages CASCADE;
15
+ TRUNCATE TABLE user_relationships CASCADE;
16
+ TRUNCATE TABLE friend_requests CASCADE;
17
+ TRUNCATE TABLE friends CASCADE;
18
+ TRUNCATE TABLE group_members CASCADE;
19
+ TRUNCATE TABLE groups CASCADE;
20
+ TRUNCATE TABLE user_game_refs CASCADE;
21
+ TRUNCATE TABLE games CASCADE;
22
+ TRUNCATE TABLE audit_logs CASCADE;
23
+ TRUNCATE TABLE player_history CASCADE;
24
+ TRUNCATE TABLE player_stats CASCADE;
25
+ TRUNCATE TABLE user_badges CASCADE;
26
+ TRUNCATE TABLE telegram_notification_preferences CASCADE;
27
+ TRUNCATE TABLE auth_nonces CASCADE;
28
+ TRUNCATE TABLE user_sessions CASCADE;
29
+ TRUNCATE TABLE keeper_actions CASCADE;
30
+ TRUNCATE TABLE keeper_health CASCADE;
31
+ TRUNCATE TABLE keeper_rounds CASCADE;
32
+ TRUNCATE TABLE jackpot_rounds CASCADE;
33
+ TRUNCATE TABLE users CASCADE;
34
+
35
+ -- Re-enable triggers
36
+ SET session_replication_role = 'origin';
37
+
38
+ -- Reset sequences (auto-increment IDs back to 1)
39
+ ALTER SEQUENCE IF EXISTS chat_messages_id_seq RESTART WITH 1;
40
+ ALTER SEQUENCE IF EXISTS chat_reactions_id_seq RESTART WITH 1;
41
+ ALTER SEQUENCE IF EXISTS chat_notifications_id_seq RESTART WITH 1;
42
+ ALTER SEQUENCE IF EXISTS user_relationships_id_seq RESTART WITH 1;
43
+ ALTER SEQUENCE IF EXISTS friends_id_seq RESTART WITH 1;
44
+ ALTER SEQUENCE IF EXISTS friend_requests_id_seq RESTART WITH 1;
45
+ ALTER SEQUENCE IF EXISTS groups_id_seq RESTART WITH 1;
46
+ ALTER SEQUENCE IF EXISTS group_members_id_seq RESTART WITH 1;
47
+ ALTER SEQUENCE IF EXISTS player_history_id_seq RESTART WITH 1;
48
+ ALTER SEQUENCE IF EXISTS user_badges_id_seq RESTART WITH 1;
49
+ ALTER SEQUENCE IF EXISTS user_sessions_id_seq RESTART WITH 1;
50
+ ALTER SEQUENCE IF EXISTS keeper_actions_id_seq RESTART WITH 1;
51
+ ALTER SEQUENCE IF EXISTS keeper_health_id_seq RESTART WITH 1;
52
+ ALTER SEQUENCE IF EXISTS keeper_rounds_id_seq RESTART WITH 1;
53
+ ALTER SEQUENCE IF EXISTS jackpot_rounds_id_seq RESTART WITH 1;
54
+ ALTER SEQUENCE IF EXISTS users_id_seq RESTART WITH 1;
55
+
56
+ -- Verify deletion
57
+ SELECT 'PURGE COMPLETE!' as status,
58
+ (SELECT COUNT(*) FROM users) as users_count,
59
+ (SELECT COUNT(*) FROM chat_messages) as messages_count,
60
+ (SELECT COUNT(*) FROM player_stats) as stats_count,
61
+ (SELECT COUNT(*) FROM user_sessions) as sessions_count;
62
+