[FE/BE] 대시보드 폰트 하향, 가변 이슈 기준 세대 정량 비교 엔진 및 4번째 카드 단독화 구현, 사양부족/오버스펙 기존 배포버전 산정식 복원 및 누락 CPU 14종 부품마스터 DB 일괄 정제 적재
This commit is contained in:
75
server.js
75
server.js
@@ -62,6 +62,28 @@ const pool = mysql.createPool({
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
console.log('✅ job_spec_standards table verification completed.');
|
||||
|
||||
await connection.query(`
|
||||
CREATE TABLE IF NOT EXISTS asset_issues (
|
||||
id INT PRIMARY KEY DEFAULT 1,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
rules JSON NOT NULL,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
console.log('✅ asset_issues table verification completed.');
|
||||
|
||||
const [issueCountRows] = await connection.query('SELECT COUNT(*) AS cnt FROM asset_issues');
|
||||
if (issueCountRows[0] && issueCountRows[0].cnt === 0) {
|
||||
const defaultRules = JSON.stringify([
|
||||
{ category: 'CPU', modelName: 'Intel Core i5-8500', condition: '미달' }
|
||||
]);
|
||||
await connection.query(
|
||||
'INSERT INTO asset_issues (id, title, rules) VALUES (1, ?, ?)',
|
||||
['윈도우 11불가', defaultRules]
|
||||
);
|
||||
console.log('✅ Default custom issue seeded into asset_issues.');
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('❌ Failed to verify/create job_spec_standards table:', {
|
||||
db: getDbConnectionSummary(),
|
||||
@@ -1180,6 +1202,59 @@ app.post('/api/upload', (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// GET /api/custom-issue (커스텀 이슈 조회)
|
||||
app.get('/api/custom-issue', async (req, res) => {
|
||||
let connection;
|
||||
try {
|
||||
connection = await pool.getConnection();
|
||||
const [rows] = await connection.query('SELECT * FROM asset_issues WHERE id = 1');
|
||||
if (rows.length > 0) {
|
||||
const row = rows[0];
|
||||
const rules = typeof row.rules === 'string' ? JSON.parse(row.rules) : row.rules;
|
||||
res.json({
|
||||
id: row.id,
|
||||
title: row.title,
|
||||
rules: rules
|
||||
});
|
||||
} else {
|
||||
res.json({
|
||||
title: '윈도우 11불가',
|
||||
rules: [
|
||||
{ category: 'CPU', requiredTier: '중급', condition: '미달' }
|
||||
]
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('❌ Failed to fetch custom issue:', err);
|
||||
res.status(500).json({ error: 'Failed to fetch custom issue' });
|
||||
} finally {
|
||||
if (connection) connection.release();
|
||||
}
|
||||
});
|
||||
|
||||
// POST /api/custom-issue (커스텀 이슈 저장/업데이트)
|
||||
app.post('/api/custom-issue', async (req, res) => {
|
||||
const { title, rules } = req.body;
|
||||
if (!title || !rules) {
|
||||
return res.status(400).json({ error: 'Missing title or rules' });
|
||||
}
|
||||
let connection;
|
||||
try {
|
||||
connection = await pool.getConnection();
|
||||
const rulesStr = JSON.stringify(rules);
|
||||
await connection.query(
|
||||
'INSERT INTO asset_issues (id, title, rules) VALUES (1, ?, ?) ON DUPLICATE KEY UPDATE title = VALUES(title), rules = VALUES(rules)',
|
||||
[title, rulesStr]
|
||||
);
|
||||
res.json({ success: true, title, rules });
|
||||
} catch (err) {
|
||||
console.error('❌ Failed to save custom issue:', err);
|
||||
res.status(500).json({ error: 'Failed to save custom issue' });
|
||||
} finally {
|
||||
if (connection) connection.release();
|
||||
}
|
||||
});
|
||||
|
||||
// Health check endpoint for container orchestration
|
||||
app.get('/health', async (req, res) => {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user