feat: 자산 관리 시스템 고도화 및 데이터 구조 최적화
- 모바일 자산(Mobile) 카테고리 추가 및 엑셀 업로드/다운로드 지원 - 클라우드 자산(Cloud) 및 변경 이력(Logs) 테이블 및 API 구현 - 데이터베이스 초기화 로직 개선 및 테이블 자동 생성 기능 추가 - 하드웨어 저장 로직 통합 및 카테고리 판별 자동화 - SW 대시보드 사용량 산출 방식 개선 (sw_id 기반 맵핑) - 수동 모달(Storage)을 통합 하드웨어 모달(HWModal)로 통합 및 정리
This commit is contained in:
49
db_init.js
49
db_init.js
@@ -18,7 +18,10 @@ async function initDB() {
|
||||
console.log('🔄 DB 초기화 시작 (표준화 스키마 적용)...');
|
||||
|
||||
// 기존 테이블 삭제
|
||||
const tablesToDrop = ['pc_assets', 'server_assets', 'storage_assets', 'equip_assets', 'mobile_assets', 'sw_sub_assets', 'sw_perm_assets', 'sw_users'];
|
||||
const tablesToDrop = [
|
||||
'pc_assets', 'server_assets', 'storage_assets', 'equip_assets', 'mobile_assets',
|
||||
'sw_sub_assets', 'sw_perm_assets', 'cloud_assets', 'sw_users', 'asset_logs'
|
||||
];
|
||||
for (const table of tablesToDrop) {
|
||||
await connection.query(`DROP TABLE IF EXISTS ${table}`);
|
||||
}
|
||||
@@ -65,7 +68,7 @@ async function initDB() {
|
||||
await connection.query(createHardwareTable('mobile_assets', '모바일기기 자산'));
|
||||
|
||||
// 소프트웨어 구독 테이블
|
||||
const createSubSwTable = `
|
||||
await connection.query(`
|
||||
CREATE TABLE sw_sub_assets (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
corp VARCHAR(100) COMMENT '구매법인',
|
||||
@@ -80,10 +83,10 @@ async function initDB() {
|
||||
remarks TEXT COMMENT '비고',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
`;
|
||||
`);
|
||||
|
||||
// 소프트웨어 영구 테이블
|
||||
const createPermSwTable = `
|
||||
await connection.query(`
|
||||
CREATE TABLE sw_perm_assets (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
corp VARCHAR(100) COMMENT '구매법인',
|
||||
@@ -97,10 +100,28 @@ async function initDB() {
|
||||
remarks TEXT COMMENT '비고',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
`;
|
||||
`);
|
||||
|
||||
// 클라우드 자산 테이블
|
||||
await connection.query(`
|
||||
CREATE TABLE cloud_assets (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
platform_name VARCHAR(100),
|
||||
corp VARCHAR(100),
|
||||
dept VARCHAR(100),
|
||||
product_name VARCHAR(255),
|
||||
account_name VARCHAR(255),
|
||||
pay_method VARCHAR(100),
|
||||
pay_day VARCHAR(50),
|
||||
card_num VARCHAR(100),
|
||||
monthly_fee VARCHAR(100),
|
||||
remarks TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
`);
|
||||
|
||||
// 소프트웨어 사용자 매핑 테이블
|
||||
const createSwUsersTable = `
|
||||
await connection.query(`
|
||||
CREATE TABLE sw_users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
sw_id VARCHAR(50) COMMENT 'SW 자산 ID',
|
||||
@@ -112,11 +133,19 @@ async function initDB() {
|
||||
doc_name VARCHAR(255) COMMENT '신청서명',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
`;
|
||||
`);
|
||||
|
||||
await connection.query(createSubSwTable);
|
||||
await connection.query(createPermSwTable);
|
||||
await connection.query(createSwUsersTable);
|
||||
// 변경 이력 테이블
|
||||
await connection.query(`
|
||||
CREATE TABLE asset_logs (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
asset_id VARCHAR(50),
|
||||
log_date VARCHAR(50),
|
||||
log_user VARCHAR(100),
|
||||
details TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
`);
|
||||
|
||||
console.log('✅ 모든 테이블이 표준화된 스키마로 재생성되었습니다.');
|
||||
await connection.end();
|
||||
|
||||
Reference in New Issue
Block a user