- 순찰/점검 기능 개선 (zone-detail 페이지 추가) - 출근/근태 시스템 개선 (연차 조회, 근무현황) - 작업분석 대분류 그룹화 및 마이그레이션 스크립트 - 모바일 네비게이션 UI 추가 - NAS 배포 도구 및 문서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
123 lines
3.6 KiB
JavaScript
123 lines
3.6 KiB
JavaScript
// routes/healthRoutes.js
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
|
|
// 헬스체크 엔드포인트
|
|
router.get('/', (req, res) => {
|
|
res.json({
|
|
status: 'healthy',
|
|
service: 'Technical Korea API',
|
|
timestamp: new Date().toISOString(),
|
|
uptime: process.uptime()
|
|
});
|
|
});
|
|
|
|
// 상세 헬스체크 (옵션)
|
|
router.get('/detail', (req, res) => {
|
|
res.json({
|
|
status: 'healthy',
|
|
service: 'Technical Korea API',
|
|
version: '2.1.0',
|
|
timestamp: new Date().toISOString(),
|
|
uptime: process.uptime(),
|
|
memory: process.memoryUsage(),
|
|
environment: process.env.NODE_ENV || 'development'
|
|
});
|
|
});
|
|
|
|
// 임시 마이그레이션 엔드포인트 - TBM work_type_id 수정
|
|
// 실행 후 이 코드를 삭제하세요!
|
|
router.post('/migrate-work-type-id', async (req, res) => {
|
|
try {
|
|
const { getDb } = require('../dbPool');
|
|
const db = await getDb();
|
|
|
|
console.log('🔄 TBM 기반 작업보고서 work_type_id 수정 시작...');
|
|
|
|
// 1. 수정 대상 확인
|
|
const [checkResult] = await db.query(`
|
|
SELECT
|
|
dwr.id,
|
|
dwr.work_type_id as current_work_type_id,
|
|
ta.task_id as correct_task_id,
|
|
w.worker_name,
|
|
dwr.report_date
|
|
FROM daily_work_reports dwr
|
|
INNER JOIN tbm_team_assignments ta ON dwr.tbm_assignment_id = ta.assignment_id
|
|
INNER JOIN workers w ON dwr.worker_id = w.worker_id
|
|
WHERE dwr.tbm_assignment_id IS NOT NULL
|
|
AND ta.task_id IS NOT NULL
|
|
AND dwr.work_type_id != ta.task_id
|
|
ORDER BY dwr.report_date DESC
|
|
`);
|
|
|
|
console.log(`📊 수정 대상: ${checkResult.length}개 레코드`);
|
|
|
|
if (checkResult.length === 0) {
|
|
return res.json({
|
|
success: true,
|
|
message: '수정할 데이터가 없습니다.',
|
|
data: { affected_rows: 0 }
|
|
});
|
|
}
|
|
|
|
// 수정 전 샘플 로깅
|
|
console.log('수정 전 샘플:', checkResult.slice(0, 5));
|
|
|
|
// 2. 업데이트 실행
|
|
const [updateResult] = await db.query(`
|
|
UPDATE daily_work_reports dwr
|
|
INNER JOIN tbm_team_assignments ta ON dwr.tbm_assignment_id = ta.assignment_id
|
|
SET dwr.work_type_id = ta.task_id
|
|
WHERE dwr.tbm_assignment_id IS NOT NULL
|
|
AND ta.task_id IS NOT NULL
|
|
AND dwr.work_type_id != ta.task_id
|
|
`);
|
|
|
|
console.log(`✅ 업데이트 완료: ${updateResult.affectedRows}개 레코드 수정됨`);
|
|
|
|
// 3. 수정 후 확인
|
|
const [samples] = await db.query(`
|
|
SELECT
|
|
dwr.id,
|
|
dwr.work_type_id,
|
|
t.task_name,
|
|
wt.name as work_type_name,
|
|
w.worker_name,
|
|
dwr.report_date
|
|
FROM daily_work_reports dwr
|
|
INNER JOIN tbm_team_assignments ta ON dwr.tbm_assignment_id = ta.assignment_id
|
|
LEFT JOIN tasks t ON dwr.work_type_id = t.task_id
|
|
LEFT JOIN work_types wt ON t.work_type_id = wt.id
|
|
LEFT JOIN workers w ON dwr.worker_id = w.worker_id
|
|
WHERE dwr.tbm_assignment_id IS NOT NULL
|
|
ORDER BY dwr.report_date DESC
|
|
LIMIT 10
|
|
`);
|
|
|
|
res.json({
|
|
success: true,
|
|
message: `${updateResult.affectedRows}개 레코드가 수정되었습니다.`,
|
|
data: {
|
|
affected_rows: updateResult.affectedRows,
|
|
before_count: checkResult.length,
|
|
samples: samples.map(s => ({
|
|
id: s.id,
|
|
worker: s.worker_name,
|
|
date: s.report_date,
|
|
task: s.task_name,
|
|
work_type: s.work_type_name
|
|
}))
|
|
}
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('마이그레이션 실패:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: '마이그레이션 실패: ' + error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router; |