feat: 자산 관리 시스템 고도화 및 데이터 구조 최적화

- 모바일 자산(Mobile) 카테고리 추가 및 엑셀 업로드/다운로드 지원
- 클라우드 자산(Cloud) 및 변경 이력(Logs) 테이블 및 API 구현
- 데이터베이스 초기화 로직 개선 및 테이블 자동 생성 기능 추가
- 하드웨어 저장 로직 통합 및 카테고리 판별 자동화
- SW 대시보드 사용량 산출 방식 개선 (sw_id 기반 맵핑)
- 수동 모달(Storage)을 통합 하드웨어 모달(HWModal)로 통합 및 정리
This commit is contained in:
2026-04-21 10:30:05 +09:00
parent 213bbe4734
commit 153e422180
7 changed files with 349 additions and 360 deletions

View File

@@ -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();