Files
firefrost-services/services/arbiter-3.0/migrations/run-migration.sh
Claude (Chronicler #57) 285f027ee9 feat: schema migration for users, admin_audit_log, server_sync_log tables
ISSUE:
Admin modules (Players, Grace, Audit, Servers, Roles) were failing silently
HTMX endpoints returned 500 errors because required tables didn't exist

ROOT CAUSE (per Gemini):
Modules expect users table (Identity) separate from subscriptions (Billing)
- users: discord_id, minecraft_username, minecraft_uuid, is_staff
- admin_audit_log: audit trail for Trinity actions
- server_sync_log: Pterodactyl sync tracking

SOLUTION:
Created schema migration with 3 new tables
- Preserves Identity/Billing separation (critical for whitelist sync)
- Auto-syncs existing subscriptions to users table
- Pre-populates Trinity members as staff

DEPLOYMENT:
Run on Command Center:
  cp services/arbiter-3.0/migrations/arbiter_schema_migration.sql /tmp/
  bash services/arbiter-3.0/migrations/run-migration.sh

After migration, all 5 admin modules will work correctly.

Credit: Gemini architectural guidance - Option A (create tables) vs Option B (rewrite queries)

Signed-off-by: Claude (Chronicler #57) <claude@firefrostgaming.com>
2026-04-03 18:39:08 +00:00

41 lines
1.1 KiB
Bash
Executable File

#!/bin/bash
# Run this on Command Center to execute the schema migration
cd /opt/arbiter-3.0/src
node -e "
const db = require('./database');
const fs = require('fs');
async function migrate() {
try {
const sql = fs.readFileSync('/tmp/arbiter_schema_migration.sql', 'utf8');
console.log('Executing schema migration...');
await db.query(sql);
console.log('✅ Migration complete!');
// Verify tables exist
const result = await db.query(\`
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('users', 'admin_audit_log', 'server_sync_log')
ORDER BY table_name
\`);
console.log('\\n📊 Created tables:');
result.rows.forEach(row => console.log(' ✓', row.table_name));
// Show user count
const userCount = await db.query('SELECT COUNT(*) FROM users');
console.log('\\n👥 Users in table:', userCount.rows[0].count);
process.exit(0);
} catch (err) {
console.error('❌ Migration failed:', err);
process.exit(1);
}
}
migrate();
"