feat: 자산 카테고리별 6개 전용 테이블 분리 및 백엔드 API, 프론트엔드 상태 관리 전면 개편 (개인PC, 서버, 스토리지, 전산비품, 구독SW, 영구SW)
This commit is contained in:
157
db_init.js
157
db_init.js
@@ -20,52 +20,140 @@ async function initDB() {
|
||||
await connection.query(`USE ${DB_NAME};`);
|
||||
console.log(`✅ 데이터베이스 생성 완료: ${DB_NAME}`);
|
||||
|
||||
// 2. 하드웨어 자산 테이블
|
||||
const createHwTable = `
|
||||
CREATE TABLE IF NOT EXISTS hw_assets (
|
||||
// 2. 개인PC 테이블
|
||||
const createPcTable = `
|
||||
CREATE TABLE IF NOT EXISTS pc_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 '명칭/용도',
|
||||
user VARCHAR(100) 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),
|
||||
gpu VARCHAR(255),
|
||||
ram VARCHAR(100),
|
||||
storage1 VARCHAR(255),
|
||||
storage2 VARCHAR(255),
|
||||
model_name VARCHAR(255),
|
||||
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) 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 '비고',
|
||||
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 createSwTable = `
|
||||
CREATE TABLE IF NOT EXISTS sw_assets (
|
||||
// 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,
|
||||
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),
|
||||
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,
|
||||
@@ -76,7 +164,7 @@ async function initDB() {
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
`;
|
||||
|
||||
// 4. 소프트웨어 사용자 매핑 테이블
|
||||
// 8. SW 사용자 매핑 테이블 (FK 제약조건 제거하여 유연하게 관리)
|
||||
const createSwUsersTable = `
|
||||
CREATE TABLE IF NOT EXISTS sw_users (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
@@ -87,16 +175,19 @@ async function initDB() {
|
||||
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
|
||||
doc_name VARCHAR(255)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
`;
|
||||
|
||||
await connection.query(createHwTable);
|
||||
await connection.query(createSwTable);
|
||||
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('✅ 테이블 생성 완료!');
|
||||
console.log('✅ 6개 전용 테이블 생성 완료!');
|
||||
await connection.end();
|
||||
console.log('🏁 DB 초기화 프로세스 종료.');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user