108 lines
3.7 KiB
JavaScript
108 lines
3.7 KiB
JavaScript
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);
|
|
});
|