import mysql from 'mysql2/promise'; import dotenv from 'dotenv'; import xlsx from 'xlsx'; dotenv.config(); async function restoreData() { const connection = await mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASS, database: process.env.DB_NAME, port: parseInt(process.env.DB_PORT || '3306') }); try { console.log('๐Ÿ”„ Restoring ServerPC metadata (Final Attempt)...'); // 1. Excel ๋กœ๋“œ const workbook = xlsx.readFile('server_db.xlsx'); const sheetName = workbook.SheetNames[0]; const excelRows = xlsx.utils.sheet_to_json(workbook.Sheets[sheetName]); // 2. DB์—์„œ ํ˜„์žฌ ์„œ๋ฒ„PC ๋ฐ์ดํ„ฐ ๋กœ๋“œ const [dbAssets] = await connection.query( "SELECT id, memo, asset_code FROM asset_pc WHERE asset_type = '์„œ๋ฒ„PC'" ); console.log(`๐Ÿ“Š DB: ${dbAssets.length} assets, Excel: ${excelRows.length} rows.`); for (const asset of dbAssets) { // ๋ฉ”๋ชจ์—์„œ "์„œ๋ฒ„์ฝ”๋“œ : [ID]" ํŒจํ„ด ์ถ”์ถœ // ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ๋กœ ๊นจ์ ธ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œ ์—ฐํ•˜๊ฒŒ ๋งค์นญ ( jh-idc-001 ํŒจํ„ด ์ฐพ๊ธฐ ) const memo = asset.memo || ''; const match = memo.match(/[a-z]+-idc-[0-9]+/i); const serverCode = match ? match[0] : null; if (!serverCode) { console.log(` โ“ Could not find server code in memo for asset ${asset.asset_code}`); continue; } // Excel์—์„œ ํ•ด๋‹น ์„œ๋ฒ„์ฝ”๋“œ ์ฐพ๊ธฐ (memo ํ•„๋“œ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ์Œ) const matchedExcelRow = excelRows.find(r => r.memo && r.memo.includes(serverCode) ); if (matchedExcelRow) { const updateData = { location: matchedExcelRow.location, location_detail: matchedExcelRow.location_detail, ip_address: matchedExcelRow.ip_address, ip_address_2: matchedExcelRow.ip_address_2, remote_tool: matchedExcelRow.remote_tool, remote_id: matchedExcelRow.remote_id, remote_pw: matchedExcelRow.remote_pw, monitoring: matchedExcelRow.monitoring, asset_purpose: matchedExcelRow.asset_purpose }; const setClause = Object.keys(updateData).map(key => `\`${key}\` = ?`).join(', '); const values = [...Object.values(updateData), asset.id]; await connection.query( `UPDATE asset_pc SET ${setClause} WHERE id = ?`, values ); console.log(` โœ… Restored: ${asset.asset_code} (Code: ${serverCode})`); } else { console.log(` โš ๏ธ No Excel match for server code: ${serverCode}`); } } console.log('๐ŸŽ‰ Restoration completed!'); } catch (err) { console.error('โŒ Restoration failed:', err); } finally { await connection.end(); } } restoreData();