import mysql from 'mysql2/promise'; import dotenv from 'dotenv'; dotenv.config(); const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; async function initDB() { const connection = await mysql.createConnection({ host: DB_HOST, user: DB_USER, password: DB_PASS, database: DB_NAME, port: parseInt(DB_PORT || '3306'), multipleStatements: true }); console.log('๐Ÿ”„ DB ์ดˆ๊ธฐํ™” ์‹œ์ž‘ (ํ‘œ์ค€ํ™” ์Šคํ‚ค๋งˆ ์ ์šฉ)...'); // ๊ธฐ์กด ํ…Œ์ด๋ธ” ์‚ญ์ œ const tablesToDrop = [ 'pc_assets', 'server_assets', 'storage_assets', 'equip_assets', 'mobile_assets', 'sw_sub_assets', 'sw_perm_assets', 'cloud_assets', 'sw_users', 'asset_logs' ]; for (const table of tablesToDrop) { await connection.query(`DROP TABLE IF EXISTS ${table}`); } // ๊ณตํ†ต ํ•˜๋“œ์›จ์–ด ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ•จ์ˆ˜ const createHardwareTable = (tableName, comment) => ` CREATE TABLE ${tableName} ( id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', asset_code VARCHAR(100) COMMENT '์ž์‚ฐ๋ฒˆํ˜ธ', purchase_date VARCHAR(50) COMMENT '๊ตฌ๋งค์—ฐ์›”', type VARCHAR(50) COMMENT '์œ ํ˜•', detail_purpose VARCHAR(50) COMMENT '์ƒ์„ธ์šฉ๋„', purpose VARCHAR(255) COMMENT '์šฉ๋„', details TEXT COMMENT '์ƒ์„ธ๋‚ด์šฉ', current_org VARCHAR(255) COMMENT 'ํ˜„ ์‚ฌ์šฉ์กฐ์ง', prev_org VARCHAR(255) COMMENT '์ด์ „ ์‚ฌ์šฉ์กฐ์ง', location VARCHAR(255) COMMENT '์„ค์น˜์œ„์น˜', manager_main VARCHAR(100) COMMENT '๋‹ด๋‹น์ž(์ •)', manager_sub VARCHAR(100) COMMENT '๋‹ด๋‹น์ž(๋ถ€)', ip_address VARCHAR(100) COMMENT 'IP ์ฃผ์†Œ 1', remote_tool VARCHAR(100) COMMENT '์›๊ฒฉ๋„๊ตฌ', server_id VARCHAR(100), server_pw VARCHAR(100), model_name VARCHAR(255), os VARCHAR(100), cpu VARCHAR(255), ram VARCHAR(100), gpu VARCHAR(100), storage1 VARCHAR(255), storage2 VARCHAR(255), storage3 VARCHAR(255), monitoring VARCHAR(100), price VARCHAR(100) COMMENT '๊ธˆ์•ก', remarks TEXT, storage_location VARCHAR(255) COMMENT '๋ณด๊ด€์œ„์น˜', status VARCHAR(50) COMMENT 'ํ˜„์žฌ์ƒํƒœ', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='${comment}'; `; await connection.query(createHardwareTable('pc_assets', '๊ฐœ์ธPC ์ž์‚ฐ')); await connection.query(createHardwareTable('server_assets', '์„œ๋ฒ„ ์ž์‚ฐ')); await connection.query(createHardwareTable('storage_assets', '์Šคํ† ๋ฆฌ์ง€ ์ž์‚ฐ')); await connection.query(createHardwareTable('equip_assets', '์ „์‚ฐ๋น„ํ’ˆ ์ž์‚ฐ')); await connection.query(createHardwareTable('mobile_assets', '๋ชจ๋ฐ”์ผ๊ธฐ๊ธฐ ์ž์‚ฐ')); // ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ๋… ํ…Œ์ด๋ธ” await connection.query(` CREATE TABLE sw_sub_assets ( id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', asset_code VARCHAR(100) COMMENT '์ž์‚ฐ๋ฒˆํ˜ธ', product_name VARCHAR(255) COMMENT '์ œํ’ˆ๋ช…', license_type VARCHAR(100) COMMENT '๋ผ์ด์„ ์Šค ์œ ํ˜•', quantity INT COMMENT '์ˆ˜๋Ÿ‰', price VARCHAR(100) COMMENT '๊ธˆ์•ก', purchase_date VARCHAR(50) COMMENT '๊ตฌ๋งค์—ฐ์›”', expiry_date VARCHAR(50) COMMENT '๋งŒ๋ฃŒ์ผ', vendor VARCHAR(255) COMMENT '๋‚ฉํ’ˆ์—…์ฒด', remarks TEXT COMMENT '๋น„๊ณ ', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `); // ์†Œํ”„ํŠธ์›จ์–ด ์˜๊ตฌ ํ…Œ์ด๋ธ” await connection.query(` CREATE TABLE sw_perm_assets ( id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', asset_code VARCHAR(100) COMMENT '์ž์‚ฐ๋ฒˆํ˜ธ', product_name VARCHAR(255) COMMENT '์ œํ’ˆ๋ช…', license_key VARCHAR(255) COMMENT '๋ผ์ด์„ ์Šค ํ‚ค', quantity INT COMMENT '์ˆ˜๋Ÿ‰', price VARCHAR(100) COMMENT '๊ธˆ์•ก', purchase_date VARCHAR(50) COMMENT '๊ตฌ๋งค์—ฐ์›”', vendor VARCHAR(255) COMMENT '๋‚ฉํ’ˆ์—…์ฒด', remarks TEXT COMMENT '๋น„๊ณ ', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `); // ํด๋ผ์šฐ๋“œ ์ž์‚ฐ ํ…Œ์ด๋ธ” await connection.query(` CREATE TABLE cloud_assets ( id VARCHAR(50) PRIMARY KEY, platform_name VARCHAR(100), corp VARCHAR(100), dept VARCHAR(100), product_name VARCHAR(255), account_name VARCHAR(255), pay_method VARCHAR(100), pay_day VARCHAR(50), card_num VARCHAR(100), monthly_fee VARCHAR(100), remarks TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `); // ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์šฉ์ž ๋งคํ•‘ ํ…Œ์ด๋ธ” await connection.query(` CREATE TABLE sw_users ( id INT AUTO_INCREMENT PRIMARY KEY, sw_id VARCHAR(50) COMMENT 'SW ์ž์‚ฐ ID', corp VARCHAR(100) COMMENT '๋ฒ•์ธ', dept VARCHAR(100) COMMENT '๋ถ€์„œ', position VARCHAR(50) COMMENT '์ง์œ„', user_name VARCHAR(100) COMMENT '์ด๋ฆ„', usage_period VARCHAR(100) COMMENT '์‚ฌ์šฉ๊ธฐ๊ฐ„', doc_name VARCHAR(255) COMMENT '์‹ ์ฒญ์„œ๋ช…', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `); // ๋ณ€๊ฒฝ ์ด๋ ฅ ํ…Œ์ด๋ธ” await connection.query(` CREATE TABLE asset_logs ( id VARCHAR(50) PRIMARY KEY, asset_id VARCHAR(50), log_date VARCHAR(50), log_user VARCHAR(100), details TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `); console.log('โœ… ๋ชจ๋“  ํ…Œ์ด๋ธ”์ด ํ‘œ์ค€ํ™”๋œ ์Šคํ‚ค๋งˆ๋กœ ์žฌ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); await connection.end(); } initDB().catch(err => { console.error('โŒ DB ์ดˆ๊ธฐํ™” ์‹คํŒจ:', err); process.exit(1); });