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. ๊ฐœ์ธPC ํ…Œ์ด๋ธ” const createPcTable = ` CREATE TABLE IF NOT EXISTS pc_assets ( id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', asset_code VARCHAR(100) COMMENT '์ž์‚ฐ๋ฒˆํ˜ธ/์ฝ”๋“œ', user VARCHAR(100) COMMENT '์‚ฌ์šฉ์ž', location VARCHAR(255) COMMENT '์„ค์น˜์œ„์น˜', cpu VARCHAR(255), gpu VARCHAR(255), ram VARCHAR(100), ssd1 VARCHAR(100), ssd2 VARCHAR(100), hdd1 VARCHAR(100), hdd2 VARCHAR(100), ip_address VARCHAR(100), hw_spec TEXT COMMENT 'HW์‚ฌ์–‘ ์ƒ์„ธ', purchase_date VARCHAR(50), price VARCHAR(100), vendor VARCHAR(255), doc_name VARCHAR(255), remarks TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `; // 3. ์„œ๋ฒ„ ํ…Œ์ด๋ธ” const createServerTable = ` CREATE TABLE IF NOT EXISTS server_assets ( id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', asset_code VARCHAR(100) COMMENT '์ž์‚ฐ๋ฒˆํ˜ธ', purchase_date VARCHAR(50) COMMENT '๊ตฌ๋งค์ผ์ž', type VARCHAR(50) DEFAULT '๋ฌผ๋ฆฌ' 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), remarks TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `; // 4. ์Šคํ† ๋ฆฌ์ง€ ํ…Œ์ด๋ธ” const createStorageTable = ` CREATE TABLE IF NOT EXISTS storage_assets ( id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', type VARCHAR(50) COMMENT '์œ ํ˜•', asset_code VARCHAR(100) COMMENT '์ž์‚ฐ์ฝ”๋“œ', asset_name VARCHAR(255) COMMENT '๋ช…์นญ', location VARCHAR(255) COMMENT '์„ค์น˜์œ„์น˜', model_name VARCHAR(255), capacity VARCHAR(100) COMMENT '์šฉ๋Ÿ‰', manager_main VARCHAR(100) COMMENT '๋‹ด๋‹น์ž(์ •)', manager_sub VARCHAR(100) COMMENT '๋‹ด๋‹น์ž(๋ถ€)', ip_address VARCHAR(100), mac_address VARCHAR(100), purchase_date VARCHAR(50), price VARCHAR(100), vendor VARCHAR(255), doc_name VARCHAR(255), remarks TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `; // 5. ์ „์‚ฐ๋น„ํ’ˆ ํ…Œ์ด๋ธ” const createEquipTable = ` CREATE TABLE IF NOT EXISTS equip_assets ( id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', type VARCHAR(50) COMMENT '๋น„ํ’ˆ์œ ํ˜•', asset_code VARCHAR(100) COMMENT '์ž์‚ฐ์ฝ”๋“œ', asset_name VARCHAR(255) COMMENT '๋ช…์นญ', location VARCHAR(255) COMMENT '์„ค์น˜์œ„์น˜', manager VARCHAR(100) COMMENT '๊ด€๋ฆฌ์ž', ip_address VARCHAR(100), mac_address VARCHAR(100), hw_spec TEXT, os VARCHAR(100), purchase_date VARCHAR(50), price VARCHAR(100), vendor VARCHAR(255), doc_name VARCHAR(255), remarks TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `; // 6. ๊ตฌ๋…SW ํ…Œ์ด๋ธ” const createSubSwTable = ` CREATE TABLE IF NOT EXISTS subscription_sw ( id VARCHAR(50) PRIMARY KEY, 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), 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; `; // 7. ์˜๊ตฌSW ํ…Œ์ด๋ธ” const createPermSwTable = ` CREATE TABLE IF NOT EXISTS permanent_sw ( id VARCHAR(50) PRIMARY KEY, category VARCHAR(100) COMMENT '๋ถ„์•ผ', corp VARCHAR(100) COMMENT '๊ตฌ๋งค๋ฒ•์ธ', dept VARCHAR(100) COMMENT '๋ถ€์„œ', product_name VARCHAR(255) NOT NULL, purchase_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; `; // 8. SW ์‚ฌ์šฉ์ž ๋งคํ•‘ ํ…Œ์ด๋ธ” (FK ์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐํ•˜์—ฌ ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌ) 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) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `; await connection.query(createPcTable); await connection.query(createServerTable); await connection.query(createStorageTable); await connection.query(createEquipTable); await connection.query(createSubSwTable); await connection.query(createPermSwTable); await connection.query(createSwUsersTable); console.log('โœ… 6๊ฐœ ์ „์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์™„๋ฃŒ!'); await connection.end(); console.log('๐Ÿ DB ์ดˆ๊ธฐํ™” ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ.'); } initDB().catch(err => { console.error('โŒ DB ์ดˆ๊ธฐํ™” ์‹คํŒจ:', err); process.exit(1); });