#!/usr/bin/env node /** * Database CLI utility for managing the bookmark manager database * Usage: node scripts/db-cli.js */ require('dotenv').config(); const dbInitializer = require('../src/database/init'); const dbConnection = require('../src/database/connection'); const dbUtils = require('../src/database/utils'); const commands = { init: 'Initialize database with migrations', status: 'Show database status and diagnostics', reset: 'Reset database (development only)', validate: 'Validate database schema', cleanup: 'Clean up expired tokens and old data', diagnostics: 'Run comprehensive database diagnostics', help: 'Show this help message' }; async function runCommand(command) { try { switch (command) { case 'init': console.log('๐Ÿš€ Initializing database...'); await dbInitializer.initialize(); break; case 'status': console.log('๐Ÿ“Š Getting database status...'); const status = await dbInitializer.getStatus(); console.log(JSON.stringify(status, null, 2)); break; case 'reset': if (process.env.NODE_ENV === 'production') { console.error('โŒ Reset is not allowed in production'); process.exit(1); } console.log('โš ๏ธ Resetting database...'); await dbInitializer.reset(); break; case 'validate': console.log('๐Ÿ” Validating database schema...'); const validation = await dbUtils.validateSchema(); console.log(JSON.stringify(validation, null, 2)); if (validation.valid) { console.log('โœ… Schema validation passed'); } else { console.log('โŒ Schema validation failed'); process.exit(1); } break; case 'cleanup': console.log('๐Ÿงน Running database cleanup...'); await dbUtils.cleanup(); break; case 'diagnostics': console.log('๐Ÿ” Running database diagnostics...'); const diagnostics = await dbUtils.diagnostics(); console.log(JSON.stringify(diagnostics, null, 2)); break; case 'help': default: console.log('๐Ÿ“– Database CLI Commands:'); console.log(''); Object.entries(commands).forEach(([cmd, desc]) => { console.log(` ${cmd.padEnd(12)} - ${desc}`); }); console.log(''); console.log('Usage: node scripts/db-cli.js '); break; } } catch (error) { console.error('โŒ Command failed:', error.message); process.exit(1); } finally { await dbConnection.close(); } } // Get command from command line arguments const command = process.argv[2]; if (!command) { runCommand('help'); } else { runCommand(command); }