const { Client } = require('pg'); const bcrypt = require('bcrypt'); const path = require('path'); const readline = require('readline'); require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); const SALT_ROUNDS = 10; const dbConfig = { host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, port: process.env.DB_PORT || 5432 }; function prompt(question) { const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); return new Promise(resolve => { rl.question(question, answer => { rl.close(); resolve(answer); }); }); } async function addUser() { try { const username = await prompt('Enter username: '); if (!username.trim()) { console.error('Error: Username cannot be empty'); process.exit(1); } const password = await prompt('Enter password: '); if (!password.trim()) { console.error('Error: Password cannot be empty'); process.exit(1); } const client = new Client(dbConfig); await client.connect(); // Check if user exists const checkUser = await client.query( 'SELECT username FROM users WHERE username = $1', [username] ); if (checkUser.rows.length > 0) { console.error('Error: Username already exists'); process.exit(1); } // Hash password const hashedPassword = await bcrypt.hash(password, SALT_ROUNDS); // Insert new user await client.query( 'INSERT INTO users (username, password) VALUES ($1, $2)', [username, hashedPassword] ); console.log(`User '${username}' created successfully`); await client.end(); } catch (error) { console.error('Error creating user:', error.message); process.exit(1); } } // Run if called directly if (require.main === module) { addUser(); }