// Quick database viewer - shows all content and exits // Usage: node scripts/view-db.js import Database from 'better-sqlite3'; import path from 'path'; import fs from 'fs'; const dbPath = path.join(process.cwd(), 'data', 'users.db'); if (!fs.existsSync(dbPath)) { console.error('āŒ Database not found at:', dbPath); process.exit(1); } const db = new Database(dbPath); console.log('šŸ“Š Database Content Viewer\n'); console.log('Database path:', dbPath); console.log('='.repeat(80)); // Get all tables const tables = db.prepare(` SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' `).all(); console.log('\nšŸ“‹ Available Tables:'); tables.forEach((table, index) => { console.log(` ${index + 1}. ${table.name}`); }); // Show content for each table tables.forEach((table) => { const tableName = table.name; // Get row count const count = db.prepare(`SELECT COUNT(*) as total FROM ${tableName}`).get(); console.log('\n' + '='.repeat(80)); console.log(`\nšŸ“Š Table: ${tableName} (${count.total} rows)`); console.log('-'.repeat(80)); // Get table schema const schema = db.prepare(`PRAGMA table_info(${tableName})`).all(); console.log('\nšŸ“ Schema:'); console.table(schema.map(col => ({ column: col.name, type: col.type, nullable: col.notnull === 0 ? 'YES' : 'NO', default: col.dflt_value || '-' }))); // Get all data const data = db.prepare(`SELECT * FROM ${tableName}`).all(); if (data.length === 0) { console.log('\nšŸ“­ No data in this table.'); } else { console.log(`\nšŸ“„ Data (showing all ${data.length} rows):`); console.table(data); // If there are many rows, also show a summary if (data.length > 10) { console.log(`\nšŸ’” Tip: Showing all ${data.length} rows. Use the interactive script for filtering.`); } } }); console.log('\n' + '='.repeat(80)); console.log('\nāœ… Done! Use `node scripts/db-access.js` for interactive queries.\n'); db.close();