import mysql from 'mysql2/promise'; import dotenv from 'dotenv'; import bcrypt from 'bcryptjs'; // 載入環境變數 dotenv.config(); // 資料庫配置 const dbConfig = { host: process.env.DB_HOST || 'mysql.theaken.com', port: parseInt(process.env.DB_PORT) || 33306, user: process.env.DB_USER || 'A102', password: process.env.DB_PASSWORD || 'Bb123456', database: process.env.DB_NAME || 'db_A102' }; // 測試帳號列表 const testUsers = [ { employee_id: 'ADMIN001', username: 'admin', email: 'admin@example.com', password: 'Admin@123456', role: 'super_admin', department: 'IT', position: '系統管理員' }, { employee_id: 'MGR001', username: 'manager', email: 'manager@example.com', password: 'Manager@123456', role: 'admin', department: '品質管理部', position: '品管經理' }, { employee_id: 'TEST001', username: 'testuser', email: 'user@example.com', password: 'User@123456', role: 'user', department: '生產部', position: '工程師' } ]; async function seedTestUsers() { let connection; try { console.log('\n╔════════════════════════════════════════════╗'); console.log('║ 5 Why Analyzer - Seed Test Users ║'); console.log('╚════════════════════════════════════════════╝\n'); console.log('🔄 Connecting to database...'); connection = await mysql.createConnection(dbConfig); console.log('✅ Connected successfully\n'); for (const user of testUsers) { // 檢查使用者是否已存在 (只用 email 精確匹配) const [existing] = await connection.execute( 'SELECT id FROM users WHERE email = ?', [user.email] ); if (existing.length > 0) { // 更新現有使用者的密碼 const passwordHash = await bcrypt.hash(user.password, 10); await connection.execute( 'UPDATE users SET password_hash = ?, role = ?, is_active = 1, employee_id = ? WHERE email = ?', [passwordHash, user.role, user.employee_id, user.email] ); console.log(`🔄 Updated: ${user.email} (${user.role})`); } else { // 建立新使用者 const passwordHash = await bcrypt.hash(user.password, 10); await connection.execute( `INSERT INTO users (employee_id, username, email, password_hash, role, department, position, is_active) VALUES (?, ?, ?, ?, ?, ?, ?, 1)`, [user.employee_id, user.username, user.email, passwordHash, user.role, user.department, user.position] ); console.log(`✅ Created: ${user.email} (${user.role})`); } } console.log('\n✅ Test users seeded successfully!\n'); console.log('📋 Test Accounts:'); console.log('─────────────────────────────────────────────'); testUsers.forEach(user => { console.log(` ${user.role.padEnd(12)} : ${user.email} / ${user.password}`); }); console.log('─────────────────────────────────────────────\n'); } catch (error) { console.error('\n❌ Seeding failed:'); console.error(' Error:', error.message); process.exit(1); } finally { if (connection) { await connection.end(); console.log('🔌 Database connection closed\n'); } } } // 執行 seedTestUsers();