Files
ITAM/db_init.js

199 lines
6.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. 개인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);
});