import mysql from 'mysql2/promise'; import dotenv from 'dotenv'; dotenv.config(); async function migrate() { 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('๐Ÿš€ ' + 'Starting migration: asset_server (์„œ๋ฒ„PC) -> asset_pc'); // 1. ์„œ๋ฒ„PC ๋ฐ์ดํ„ฐ ์กฐํšŒ const [serverPcs] = await connection.query( "SELECT * FROM asset_server WHERE asset_type = '์„œ๋ฒ„PC'" ); if (serverPcs.length === 0) { console.log('โœ… ' + 'No ServerPC assets found in asset_server table.'); return; } console.log(`๐Ÿ“ฆ Found ${serverPcs.length} ServerPC assets to migrate.`); // 2. asset_pc ์ปฌ๋Ÿผ ์ •๋ณด ์กฐํšŒ const [pcColumnsRows] = await connection.query('DESCRIBE asset_pc'); const pcColumns = pcColumnsRows.map(r => r.Field); console.log('๐Ÿ“‹ Target columns:', pcColumns); // 3. asset_pc ํ…Œ์ด๋ธ”๋กœ ์ด๋™ (category๋ฅผ 'PC'๋กœ ๋ณ€๊ฒฝ) for (const asset of serverPcs) { const dataToInsert = {}; // ๊ณตํ†ต ์ปฌ๋Ÿผ ๋งคํ•‘ pcColumns.forEach(col => { if (col === 'category') { dataToInsert[col] = 'PC'; } else if (asset.hasOwnProperty(col)) { dataToInsert[col] = asset[col]; } }); // ํŠน์ˆ˜ํ•œ ๋งคํ•‘ (์˜ˆ: model_name -> asset_pc์— ์ปฌ๋Ÿผ์ด ์—†๋‹ค๋ฉด memo์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฌด์‹œ) // ํ˜„์žฌ asset_pc์—๋Š” model_name์ด ์—†์œผ๋ฏ€๋กœ memo์— ๋ณด์กดํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•จ if (asset.model_name) { const currentMemo = dataToInsert.memo || ''; dataToInsert.memo = `[๋ชจ๋ธ๋ช…: ${asset.model_name}] ${currentMemo}`.trim(); } const columns = Object.keys(dataToInsert).map(col => `\`${col}\``).join(', '); const placeholders = Object.keys(dataToInsert).map(() => '?').join(', '); const values = Object.values(dataToInsert); await connection.query( `INSERT INTO asset_pc (${columns}) VALUES (${placeholders})`, values ); console.log(` - Migrated: ${asset.asset_code || asset.id}`); } // 4. asset_server ํ…Œ์ด๋ธ”์—์„œ ์‚ญ์ œ const [deleteResult] = await connection.query( "DELETE FROM asset_server WHERE asset_type = '์„œ๋ฒ„PC'" ); console.log(`๐Ÿ—‘๏ธ Deleted ${deleteResult.affectedRows} records from asset_server.`); console.log('๐ŸŽ‰ Migration completed successfully!'); } catch (err) { console.error('โŒ Migration failed:', err); } finally { await connection.end(); } } migrate();