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, port: parseInt(DB_PORT || '3306') }); console.log('๐Ÿš€ DB ์ดˆ๊ธฐํ™” ์‹œ์ž‘...'); // 1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ await connection.query(`CREATE DATABASE IF NOT EXISTS ${DB_NAME};`); await connection.query(`USE ${DB_NAME};`); console.log(`โœ… ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ ์™„๋ฃŒ: ${DB_NAME}`); // 2. ํ•˜๋“œ์›จ์–ด ์ž์‚ฐ ํ…Œ์ด๋ธ” const createHwTable = ` CREATE TABLE IF NOT EXISTS hw_assets ( id VARCHAR(50) PRIMARY KEY, type VARCHAR(50) NOT NULL COMMENT '๊ฐœ์ธPC, ์„œ๋ฒ„, ์Šคํ† ๋ฆฌ์ง€, ์ „์‚ฐ๋น„ํ’ˆ', corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', asset_code VARCHAR(100) COMMENT '์ž์‚ฐ๋ฒˆํ˜ธ/์ฝ”๋“œ', asset_name VARCHAR(255) COMMENT '๋ช…์นญ/์šฉ๋„', location VARCHAR(255) COMMENT '์„ค์น˜์œ„์น˜', current_org VARCHAR(255) COMMENT 'ํ˜„ ์‚ฌ์šฉ์กฐ์ง', prev_org VARCHAR(255) COMMENT '์ด์ „ ์‚ฌ์šฉ์กฐ์ง', manager_main VARCHAR(100) COMMENT '๋‹ด๋‹น์ž(์ •)', manager_sub VARCHAR(100) COMMENT '๋‹ด๋‹น์ž(๋ถ€)', ip_address VARCHAR(100) COMMENT 'IP ์ฃผ์†Œ 1', ip_address2 VARCHAR(100) COMMENT 'IP ์ฃผ์†Œ 2', mac_address VARCHAR(100) COMMENT 'MAC ์ฃผ์†Œ', os VARCHAR(100), cpu VARCHAR(255), ram VARCHAR(100), storage1 VARCHAR(255), storage2 VARCHAR(255), model_name VARCHAR(255), purchase_date VARCHAR(50), price VARCHAR(100), vendor VARCHAR(255) COMMENT '๋‚ฉํ’ˆ์—…์ฒด', doc_name VARCHAR(255) COMMENT 'ํ’ˆ์˜์„œ๋ช…', remote_tool VARCHAR(100) COMMENT '์›๊ฒฉ๋„๊ตฌ', server_id VARCHAR(100), server_pw VARCHAR(100), monitoring VARCHAR(100), remarks TEXT COMMENT '๋น„๊ณ ', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `; // 3. ์†Œํ”„ํŠธ์›จ์–ด ์ž์‚ฐ ํ…Œ์ด๋ธ” const createSwTable = ` CREATE TABLE IF NOT EXISTS sw_assets ( id VARCHAR(50) PRIMARY KEY, type VARCHAR(50) NOT NULL COMMENT '๊ตฌ๋…SW, ์˜๊ตฌSW', category VARCHAR(100) COMMENT '๋ถ„์•ผ', corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', dept VARCHAR(100) COMMENT '๋ถ€์„œ', product_name VARCHAR(255) NOT NULL, purchase_date VARCHAR(50), subscription_date VARCHAR(50), maintenance_status TINYINT(1) DEFAULT 0, price VARCHAR(100), quantity INT DEFAULT 1, account_id VARCHAR(255) COMMENT '๊ณ„์ •๋ช…', vendor VARCHAR(255), remarks TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `; // 4. ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์šฉ์ž ๋งคํ•‘ ํ…Œ์ด๋ธ” const createSwUsersTable = ` CREATE TABLE IF NOT EXISTS sw_users ( id VARCHAR(50) PRIMARY KEY, sw_id VARCHAR(50), corp VARCHAR(100), dept VARCHAR(100), team VARCHAR(100), position VARCHAR(50), name VARCHAR(100), usage_period VARCHAR(100), doc_name VARCHAR(255), FOREIGN KEY (sw_id) REFERENCES sw_assets(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `; await connection.query(createHwTable); await connection.query(createSwTable); await connection.query(createSwUsersTable); console.log('โœ… ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์™„๋ฃŒ!'); await connection.end(); console.log('๐Ÿ DB ์ดˆ๊ธฐํ™” ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ.'); } initDB().catch(err => { console.error('โŒ DB ์ดˆ๊ธฐํ™” ์‹คํŒจ:', err); process.exit(1); });