fix: 빌드 에러 및 포트 동기화 수정
This commit is contained in:
71
server.js
71
server.js
@@ -52,7 +52,44 @@ async function ensureTables() {
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
console.log('✅ Cloud & Logs tables ensured.');
|
||||
await connection.query(`
|
||||
CREATE TABLE IF NOT EXISTS pc_assets (
|
||||
id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100), asset_code VARCHAR(100), purchase_date VARCHAR(50),
|
||||
type VARCHAR(50), detail_purpose VARCHAR(100), purpose VARCHAR(255), details TEXT,
|
||||
current_org VARCHAR(100), prev_org VARCHAR(100), location VARCHAR(255),
|
||||
manager_main VARCHAR(100), manager_sub VARCHAR(100), ip_address VARCHAR(50),
|
||||
remote_tool VARCHAR(100), server_id VARCHAR(100), server_pw VARCHAR(100),
|
||||
model_name VARCHAR(255), os VARCHAR(100), cpu VARCHAR(100), ram VARCHAR(100), gpu VARCHAR(100),
|
||||
storage1 VARCHAR(100), storage2 VARCHAR(100), storage3 VARCHAR(100), monitoring VARCHAR(100), price VARCHAR(100), remarks TEXT
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
// 다른 하드웨어 테이블들도 동일한 스키마로 생성 (서버, 스토리지, 비품, 모바일)
|
||||
for (const table of ['server_assets', 'storage_assets', 'equip_assets', 'mobile_assets']) {
|
||||
await connection.query(`CREATE TABLE IF NOT EXISTS ${table} LIKE pc_assets`);
|
||||
}
|
||||
|
||||
await connection.query(`
|
||||
CREATE TABLE IF NOT EXISTS sw_sub_assets (
|
||||
id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100), asset_code VARCHAR(100), product_name VARCHAR(255),
|
||||
license_type VARCHAR(100), quantity INT, price VARCHAR(100), purchase_date VARCHAR(50),
|
||||
expiry_date VARCHAR(50), vendor VARCHAR(100), remarks TEXT
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
await connection.query(`
|
||||
CREATE TABLE IF NOT EXISTS sw_perm_assets (
|
||||
id VARCHAR(50) PRIMARY KEY, corp VARCHAR(100), asset_code VARCHAR(100), product_name VARCHAR(255),
|
||||
license_key VARCHAR(255), quantity INT, price VARCHAR(100), purchase_date VARCHAR(50),
|
||||
vendor VARCHAR(100), remarks TEXT
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
await connection.query(`
|
||||
CREATE TABLE IF NOT EXISTS sw_users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY, sw_id VARCHAR(50), corp VARCHAR(100), dept VARCHAR(100),
|
||||
position VARCHAR(100), user_name VARCHAR(100), usage_period VARCHAR(255), doc_name VARCHAR(255)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
|
||||
console.log('✅ All ITAM tables ensured.');
|
||||
} finally {
|
||||
connection.release();
|
||||
}
|
||||
@@ -110,13 +147,8 @@ const mapHardware = (r, defaultType) => ({
|
||||
app.get('/api/pc', async (req, res) => {
|
||||
try {
|
||||
const [rows] = await pool.query('SELECT * FROM pc_assets');
|
||||
console.log('🔍 DB Raw Rows (PC):', rows.length, 'items found.');
|
||||
if (rows.length > 0) console.log('🔍 First row sample:', rows[0]);
|
||||
res.json(rows.map(r => mapHardware(r, '개인PC')));
|
||||
} catch (err) {
|
||||
console.error('❌ DB Query Error (PC):', err.message);
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
} catch (err) { res.status(500).json({ error: err.message }); }
|
||||
});
|
||||
|
||||
app.post('/api/pc/batch', async (req, res) => {
|
||||
@@ -320,6 +352,31 @@ app.post('/api/sw-users/batch', async (req, res) => {
|
||||
} catch (err) { res.status(500).json({ error: err.message }); }
|
||||
});
|
||||
|
||||
// 자산코드 생성 API
|
||||
app.get('/api/generate-asset-code', async (req, res) => {
|
||||
const { prefix } = req.query;
|
||||
if (!prefix) return res.status(400).json({ error: 'Prefix is required' });
|
||||
|
||||
try {
|
||||
const tables = ['pc_assets', 'server_assets', 'storage_assets', 'equip_assets', 'mobile_assets', 'sw_sub_assets', 'sw_perm_assets'];
|
||||
let maxNum = 0;
|
||||
|
||||
for (const table of tables) {
|
||||
const [rows] = await pool.query(`SELECT asset_code FROM ${table} WHERE asset_code LIKE ?`, [`${prefix}%`]);
|
||||
rows.forEach(r => {
|
||||
const numPart = r.asset_code.replace(prefix, '');
|
||||
const num = parseInt(numPart);
|
||||
if (!isNaN(num) && num > maxNum) maxNum = num;
|
||||
});
|
||||
}
|
||||
|
||||
const nextCode = `${prefix}${(maxNum + 1).toString().padStart(3, '0')}`;
|
||||
res.json({ nextCode });
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
// 초기화 및 서버 기동
|
||||
ensureTables().then(() => {
|
||||
app.listen(PORT, () => {
|
||||
|
||||
Reference in New Issue
Block a user