import mysql from 'mysql2/promise'; import dotenv from 'dotenv'; import fs from 'fs'; dotenv.config(); const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; async function restoreDB() { const connection = await mysql.createConnection({ host: DB_HOST, user: DB_USER, password: DB_PASS, database: DB_NAME, port: parseInt(DB_PORT || '3306') }); console.log('πŸ“– λ°±μ—… 파일 μ½λŠ” 쀑...'); const rawData = fs.readFileSync('backup_atam_data.json', 'utf8'); const data = JSON.parse(rawData); const tables = { pc_assets: data.pc_assets || [], server_assets: data.server_assets || [], storage_assets: data.storage_assets || [], equip_assets: data.equip_assets || [], mobile_assets: data.mobile_assets || [], sw_sub_assets: data.sw_sub_assets || [], sw_perm_assets: data.sw_perm_assets || [], cloud_assets: data.cloud_assets || [], sw_users: data.sw_users || [], asset_logs: data.logs || [] }; console.log('πŸš€ 데이터 볡ꡬ μ‹œμž‘...'); for (const [tableName, rows] of Object.entries(tables)) { if (rows.length === 0) { console.log(`⏩ ${tableName}: 데이터 μ—†μŒ, κ±΄λ„ˆλœ€`); continue; } console.log(`πŸ“¦ ${tableName} 볡ꡬ 쀑 (${rows.length}개)...`); // ν…Œμ΄λΈ” 컬럼 정보 쑰회 const [columns] = await connection.query(`SHOW COLUMNS FROM ${tableName}`); const validColumns = columns.map(c => c.Field); for (const row of rows) { const filteredRow = {}; Object.keys(row).forEach(key => { let dbKey = key; // ν•„λ“œλͺ… λ§€ν•‘ 보정 (λ°±μ—… 데이터 -> DB μŠ€ν‚€λ§ˆ) if (key === 'manager') dbKey = 'manager_main'; if (key === 'asset_name' && (tableName === 'mobile_assets' || tableName === 'equip_assets')) dbKey = 'model_name'; if (key === 'mac_address' && tableName === 'pc_assets') dbKey = 'remarks'; // μŠ€ν‚€λ§ˆμ— μ—†λŠ” 경우 λΉ„κ³ λ‘œ // created_at λ“± λ‚ μ§œ 포맷 보정 if (validColumns.includes(dbKey)) { let value = row[key]; if (dbKey === 'created_at' && value) { // '2026-04-17T08:52:11.000Z' -> '2026-04-17 08:52:11' value = value.replace('T', ' ').replace(/\..*$/, ''); } filteredRow[dbKey] = value; } }); // ν•„μˆ˜κ°’ ID 확인 if (!filteredRow.id) { filteredRow.id = Math.random().toString(36).substr(2, 9); } try { await connection.query(`INSERT INTO ${tableName} SET ?`, filteredRow); } catch (err) { console.error(`❌ [${tableName}] ID ${filteredRow.id} μ‚½μž… μ‹€νŒ¨: ${err.message}`); } } console.log(`βœ… ${tableName} μ™„λ£Œ`); } console.log('✨ λͺ¨λ“  데이터 볡ꡬ가 μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.'); await connection.end(); } restoreDB().catch(err => { console.error('❌ 볡ꡬ μ‹€νŒ¨:', err); process.exit(1); });