/** * 작업 중 문제 신고 라우터 */ const express = require('express'); const router = express.Router(); const workIssueController = require('../controllers/workIssueController'); const { createRequirePage } = require('../../../shared/middleware/pagePermission'); const { getDb } = require('../config/database'); const requirePage = createRequirePage(getDb); // ==================== 카테고리 관리 ==================== // 모든 카테고리 조회 router.get('/categories', workIssueController.getAllCategories); // 타입별 카테고리 조회 (nonconformity/safety) router.get('/categories/type/:type', workIssueController.getCategoriesByType); // 카테고리 생성 router.post('/categories', requirePage('report_work_issues'), workIssueController.createCategory); // 카테고리 수정 router.put('/categories/:id', requirePage('report_work_issues'), workIssueController.updateCategory); // 카테고리 삭제 router.delete('/categories/:id', requirePage('report_work_issues'), workIssueController.deleteCategory); // ==================== 사전 정의 항목 관리 ==================== // 모든 항목 조회 router.get('/items', workIssueController.getAllItems); // 카테고리별 항목 조회 router.get('/items/category/:categoryId', workIssueController.getItemsByCategory); // 항목 생성 router.post('/items', requirePage('report_work_issues'), workIssueController.createItem); // 항목 수정 router.put('/items/:id', requirePage('report_work_issues'), workIssueController.updateItem); // 항목 삭제 router.delete('/items/:id', requirePage('report_work_issues'), workIssueController.deleteItem); // ==================== 통계 ==================== // 통계 요약 router.get('/stats/summary', requirePage('report_work_issues'), workIssueController.getStatsSummary); // 카테고리별 통계 router.get('/stats/by-category', requirePage('report_work_issues'), workIssueController.getStatsByCategory); // 작업장별 통계 router.get('/stats/by-workplace', requirePage('report_work_issues'), workIssueController.getStatsByWorkplace); // ==================== 문제 신고 관리 ==================== // 신고 목록 조회 router.get('/', workIssueController.getAllReports); // 신고 생성 router.post('/', workIssueController.createReport); // 신고 상세 조회 router.get('/:id', workIssueController.getReportById); // 신고 수정 router.put('/:id', workIssueController.updateReport); // 신고 삭제 router.delete('/:id', workIssueController.deleteReport); // ==================== 유형 이관 ==================== // 유형 이관 (인증 필요) router.put('/:id/transfer', workIssueController.transferReport); // ==================== 상태 관리 ==================== // 신고 접수 router.put('/:id/receive', requirePage('report_work_issues'), workIssueController.receiveReport); // 담당자 배정 router.put('/:id/assign', requirePage('report_work_issues'), workIssueController.assignReport); // 처리 시작 router.put('/:id/start', workIssueController.startProcessing); // 처리 완료 router.put('/:id/complete', workIssueController.completeReport); // 신고 종료 router.put('/:id/close', requirePage('report_work_issues'), workIssueController.closeReport); // 상태 변경 이력 조회 router.get('/:id/logs', workIssueController.getStatusLogs); module.exports = router;