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>
41 lines
1.1 KiB
Bash
Executable File
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();
|
|
"
|