Files
tk-factory-services/tksafety/api/routes/visitRequestRoutes.js
Hyungi Ahn 6a20056e05 feat(tksafety): 통합 출입신고 관리 시스템 구현
- DB 마이그레이션: request_type, visitor_name, department_id, check_in/out_time 컬럼 + status ENUM 확장
- 4소스 UNION 대시보드: 방문(외부/내부) + TBM + 협력업체 통합 조회
- 체크인/체크아웃 API + 내부 출입 신고(승인 불필요) 지원
- 통합 출입 현황판 페이지 신규 (entry-dashboard.html)
- 출입 신청/관리 페이지에 유형 필터 + 체크인/아웃 버튼 추가
- safety_entry_dashboard 권한 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 14:24:13 +09:00

47 lines
2.4 KiB
JavaScript

const express = require('express');
const router = express.Router();
const visitRequestController = require('../controllers/visitRequestController');
const { requireAuth, requireAdmin, requirePage } = require('../middleware/auth');
router.use(requireAuth);
// Visit requests CRUD
router.post('/requests', requirePage('safety_visit_request'), visitRequestController.createVisitRequest);
router.get('/requests', visitRequestController.getAllVisitRequests);
router.get('/requests/:id', visitRequestController.getVisitRequestById);
router.put('/requests/:id', requirePage('safety_visit_request'), visitRequestController.updateVisitRequest);
router.delete('/requests/:id', requirePage('safety_visit_request'), visitRequestController.deleteVisitRequest);
router.put('/requests/:id/approve', requireAdmin, visitRequestController.approveVisitRequest);
router.put('/requests/:id/reject', requireAdmin, visitRequestController.rejectVisitRequest);
// Check-in / Check-out
router.put('/requests/:id/check-in', visitRequestController.checkIn);
router.put('/requests/:id/check-out', visitRequestController.checkOut);
// Entry Dashboard (통합 출입 현황)
router.get('/entry-dashboard', visitRequestController.getEntryDashboard);
router.get('/entry-dashboard/stats', visitRequestController.getEntryStats);
// Categories & Workplaces
router.get('/categories', visitRequestController.getAllCategories);
router.get('/workplaces', visitRequestController.getWorkplaces);
// Departments
router.get('/departments', visitRequestController.getDepartments);
// Visit purposes
router.get('/purposes', visitRequestController.getAllVisitPurposes);
router.get('/purposes/active', visitRequestController.getActiveVisitPurposes);
router.post('/purposes', requireAdmin, visitRequestController.createVisitPurpose);
router.put('/purposes/:id', requireAdmin, visitRequestController.updateVisitPurpose);
router.delete('/purposes/:id', requireAdmin, visitRequestController.deleteVisitPurpose);
// Training records
router.post('/training', requireAdmin, visitRequestController.createTrainingRecord);
router.get('/training', visitRequestController.getTrainingRecords);
router.get('/training/request/:requestId', visitRequestController.getTrainingRecordByRequestId);
router.put('/training/:id', requireAdmin, visitRequestController.updateTrainingRecord);
router.post('/training/:id/complete', requireAdmin, visitRequestController.completeTraining);
module.exports = router;