import Database from "better-sqlite3"; const db = new Database("./data/database.sqlite"); console.log("šŸ”„ Migrating database to username-based authentication...\n"); try { // Check current table structure const tableInfo = db.prepare("PRAGMA table_info(users)").all(); console.log("Current users table columns:"); tableInfo.forEach(col => console.log(` - ${col.name}: ${col.type}`)); const hasUsername = tableInfo.some(col => col.name === 'username'); const hasEmail = tableInfo.some(col => col.name === 'email'); if (hasUsername) { console.log("āœ… Username column already exists!"); } else if (hasEmail) { console.log("\nšŸ“ Adding username column..."); // Add username column db.exec(`ALTER TABLE users ADD COLUMN username TEXT;`); console.log("āœ… Username column added"); // Copy email data to username for existing users console.log("šŸ“‹ Migrating existing email data to username..."); const result = db.exec(`UPDATE users SET username = email WHERE username IS NULL;`); console.log("āœ… Data migrated"); // Create unique index on username console.log("šŸ” Creating unique index on username..."); try { db.exec(`CREATE UNIQUE INDEX idx_users_username_unique ON users(username);`); console.log("āœ… Unique index created"); } catch (e) { console.log("ā„¹ļø Index already exists or couldn't be created:", e.message); } // Verify migration console.log("\nšŸ” Verifying migration..."); const users = db.prepare("SELECT id, name, username, email FROM users LIMIT 3").all(); console.log("Sample users after migration:"); users.forEach(user => { console.log(` - ${user.name}: username="${user.username}", email="${user.email || 'NULL'}"`); }); console.log("\nāœ… Migration completed successfully!"); console.log("ā„¹ļø You can now log in using usernames instead of emails"); } else { console.log("āŒ Neither username nor email column found. Database may be corrupted."); process.exit(1); } } catch (error) { console.error("āŒ Migration failed:", error.message); process.exit(1); } finally { db.close(); }