const XLSX = require('xlsx'); const mysql = require('mysql2/promise'); const dotenv = require('dotenv'); const path = require('path'); dotenv.config({ path: path.join(__dirname, '../.env') }); const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; async function importUsers() { const connection = await mysql.createConnection({ host: DB_HOST, user: DB_USER, password: DB_PASS, database: DB_NAME, port: parseInt(DB_PORT || '3306') }); console.log('πŸš€ Excel 데이터 λ‘œλ“œ 쀑...'); const workbook = XLSX.readFile('system_User (20260615).xlsx'); const sheetName = workbook.SheetNames[0]; const sheet = workbook.Sheets[sheetName]; const data = XLSX.utils.sheet_to_json(sheet); console.log(`πŸ“Š 총 ${data.length}개의 데이터λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.`); // κΈ°μ‘΄ 데이터 μ‚­μ œ μ—¬λΆ€ (μ‚¬μš©μž μš”κ΅¬μ‚¬ν•­μ— 따라 κ²°μ • κ°€λŠ₯ν•˜μ§€λ§Œ, 보톡 μ΄ˆκΈ°ν™” ν›„ μž¬μž…μž…) // μ—¬κΈ°μ„œλŠ” 쀑볡 λ°©μ§€λ₯Ό μœ„ν•΄ κΈ°μ‘΄ 데이터λ₯Ό μ‚­μ œν•˜κ³  μƒˆλ‘œ λ„£λŠ” 방식을 μ·¨ν•˜κ² μŠ΅λ‹ˆλ‹€. console.log('🧹 κΈ°μ‘΄ system_users 데이터 μ‚­μ œ 쀑...'); await connection.query('DELETE FROM system_users'); console.log('πŸ“₯ 데이터 μ‚½μž… 쀑...'); let successCount = 0; for (let i = 0; i < data.length; i++) { const row = data[i]; const { emp_no, user_name, dept_name, position, status } = row; // ID 생성 (USR_ + 인덱슀 001 ν˜•μ‹) const id = `USR_${String(i + 1).padStart(3, '0')}`; const createdAt = new Date().toISOString().replace('T', ' ').substring(0, 19); try { await connection.query( 'INSERT INTO system_users (id, emp_no, user_name, dept_name, position, status, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)', [id, String(emp_no), user_name, dept_name, position, status, createdAt] ); successCount++; } catch (err) { console.error(`❌ μ‚½μž… μ‹€νŒ¨ (Row ${i + 2}):`, err.message); } } console.log(`βœ… μ™„λ£Œ: ${successCount}개의 μ‚¬μš©μžκ°€ μ„±κ³΅μ μœΌλ‘œ λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`); await connection.end(); } importUsers().catch(err => { console.error('❌ μž‘μ—… 쀑 였λ₯˜ λ°œμƒ:', err); process.exit(1); });