const bcrypt = require('bcryptjs'); const { v4: uuidv4 } = require('uuid'); const mysql = require('mysql2/promise'); // 資料庫配置 const dbConfig = { host: process.env.DB_HOST || 'mysql.theaken.com', port: parseInt(process.env.DB_PORT || '33306'), user: process.env.DB_USER || 'AI_Platform', password: process.env.DB_PASSWORD || 'Aa123456', database: process.env.DB_NAME || 'db_AI_Platform', charset: 'utf8mb4', timezone: '+08:00' }; // 創建資料庫連接 const db = { async query(sql, params = []) { const connection = await mysql.createConnection(dbConfig); try { const [rows] = await connection.execute(sql, params); return rows; } finally { await connection.end(); } }, async queryOne(sql, params = []) { const results = await this.query(sql, params); return results.length > 0 ? results[0] : null; }, async insert(sql, params = []) { const connection = await mysql.createConnection(dbConfig); try { const [result] = await connection.execute(sql, params); return result; } finally { await connection.end(); } }, async close() { // 不需要關閉,因為每次查詢都創建新連接 } }; // 測試用戶數據 const testUsers = [ { name: '系統管理員', email: 'admin@ai-platform.com', password: 'admin123456', department: 'ITBU', role: 'admin', description: '系統管理員帳號,擁有所有權限' }, { name: '開發者測試', email: 'developer@ai-platform.com', password: 'dev123456', department: 'ITBU', role: 'developer', description: '開發者測試帳號,可以提交應用和提案' }, { name: '一般用戶測試', email: 'user@ai-platform.com', password: 'user123456', department: 'MBU1', role: 'user', description: '一般用戶測試帳號,可以瀏覽和評分' }, { name: '評委測試', email: 'judge@ai-platform.com', password: 'judge123456', department: 'HQBU', role: 'admin', description: '評委測試帳號,可以評分應用和提案' }, { name: '團隊負責人', email: 'team-lead@ai-platform.com', password: 'team123456', department: 'SBU', role: 'developer', description: '團隊負責人測試帳號' } ]; async function createTestUsers() { console.log('🚀 開始創建測試用戶...'); try { // 測試資料庫連接 await db.query('SELECT 1'); console.log('✅ 資料庫連接成功'); for (const userData of testUsers) { try { // 檢查用戶是否已存在 const existingUser = await db.queryOne( 'SELECT id FROM users WHERE email = ?', [userData.email] ); if (existingUser) { console.log(`⚠️ 用戶 ${userData.email} 已存在,跳過創建`); continue; } // 加密密碼 const saltRounds = 12; const password_hash = await bcrypt.hash(userData.password, saltRounds); // 創建用戶 const userId = uuidv4(); const sql = ` INSERT INTO users ( id, name, email, password_hash, department, role, join_date, total_likes, total_views, is_active ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `; const params = [ userId, userData.name, userData.email, password_hash, userData.department, userData.role, new Date().toISOString().split('T')[0], 0, 0, true ]; await db.insert(sql, params); console.log(`✅ 創建用戶: ${userData.name} (${userData.email}) - ${userData.role}`); } catch (error) { console.error(`❌ 創建用戶 ${userData.email} 失敗:`, error.message); } } // 顯示創建的用戶列表 console.log('\n📋 測試用戶列表:'); const users = await db.query(` SELECT name, email, role, department, join_date FROM users WHERE email LIKE '%@ai-platform.com' ORDER BY role, name `); users.forEach((user, index) => { console.log(`${index + 1}. ${user.name} (${user.email})`); console.log(` 角色: ${user.role} | 部門: ${user.department} | 加入日期: ${user.join_date}`); }); console.log('\n🔑 登入資訊:'); testUsers.forEach(user => { console.log(`${user.role.toUpperCase()}: ${user.email} / ${user.password}`); }); console.log('\n🎉 測試用戶創建完成!'); } catch (error) { console.error('❌ 創建測試用戶時發生錯誤:', error); } finally { await db.close(); } } // 如果直接執行此腳本 if (require.main === module) { createTestUsers(); } module.exports = { createTestUsers, testUsers };