feat: 데이터베이스 및 웹 UI 대규모 리팩토링
- 삭제된 DB 테이블들과 관련 코드 정리: * 12개 사용하지 않는 테이블 삭제 (activity_logs, CuttingPlan, DailyIssueReports 등) * 관련 모델, 컨트롤러, 라우트 파일들 삭제 * index.js에서 삭제된 라우트들 제거 - 웹 UI 페이지 정리: * 21개 사용하지 않는 페이지 삭제 * issue-reports 폴더 전체 삭제 * 모든 사용자 권한을 그룹장 대시보드로 통일 - 데이터베이스 스키마 정리: * v1 스키마로 통일 (daily_work_reports 테이블) * JSON 데이터 임포트 스크립트 구현 * 외래키 관계 정리 및 데이터 일관성 확보 - 통합 Docker Compose 설정: * 모든 서비스를 단일 docker-compose.yml로 통합 * 20000번대 포트 유지 * JWT 시크릿 및 환경변수 설정 - 문서화: * DATABASE_SCHEMA.md: 현재 DB 스키마 문서화 * DELETED_TABLES.md: 삭제된 테이블 목록 * DELETED_PAGES.md: 삭제된 페이지 목록
This commit is contained in:
@@ -1,21 +0,0 @@
|
||||
// routes/cuttingPlanRoutes.js
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const cuttingPlanController = require('../controllers/cuttingPlanController');
|
||||
|
||||
// CREATE
|
||||
router.post('/', cuttingPlanController.createCuttingPlan);
|
||||
|
||||
// READ ALL
|
||||
router.get('/', cuttingPlanController.getAllCuttingPlans);
|
||||
|
||||
// READ ONE
|
||||
router.get('/:cutting_plan_id', cuttingPlanController.getCuttingPlanById);
|
||||
|
||||
// UPDATE
|
||||
router.put('/:cutting_plan_id', cuttingPlanController.updateCuttingPlan);
|
||||
|
||||
// DELETE
|
||||
router.delete('/:cutting_plan_id', cuttingPlanController.removeCuttingPlan);
|
||||
|
||||
module.exports = router;
|
||||
@@ -1,21 +0,0 @@
|
||||
// routes/equipmentListRoutes.js
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const equipmentListController = require('../controllers/equipmentListController');
|
||||
|
||||
// CREATE
|
||||
router.post('/', equipmentListController.createEquipment);
|
||||
|
||||
// READ ALL
|
||||
router.get('/', equipmentListController.getAllEquipment);
|
||||
|
||||
// READ ONE
|
||||
router.get('/:equipment_id', equipmentListController.getEquipmentById);
|
||||
|
||||
// UPDATE
|
||||
router.put('/:equipment_id', equipmentListController.updateEquipment);
|
||||
|
||||
// DELETE
|
||||
router.delete('/:equipment_id', equipmentListController.removeEquipment);
|
||||
|
||||
module.exports = router;
|
||||
@@ -1,42 +0,0 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const multer = require('multer');
|
||||
const path = require('path');
|
||||
|
||||
const factoryInfoController = require('../controllers/factoryInfoController');
|
||||
const { verifyToken } = require('../middlewares/authMiddleware'); // ← 수정
|
||||
const { requireAccess } = require('../middlewares/accessMiddleware'); // ← 수정
|
||||
|
||||
// 📦 파일 저장 설정
|
||||
const storage = multer.diskStorage({
|
||||
destination: (req, file, cb) => {
|
||||
cb(null, 'public/uploads/');
|
||||
},
|
||||
filename: (req, file, cb) => {
|
||||
const uniqueName = `map_image-${Date.now()}${path.extname(file.originalname)}`;
|
||||
cb(null, uniqueName);
|
||||
}
|
||||
});
|
||||
const upload = multer({ storage });
|
||||
|
||||
// CREATE
|
||||
router.post(
|
||||
'/',
|
||||
verifyToken, // ← 수정
|
||||
upload.single('map_image'),
|
||||
factoryInfoController.createFactoryInfo
|
||||
);
|
||||
|
||||
// READ ALL
|
||||
router.get('/', verifyToken, factoryInfoController.getAllFactoryInfo); // ← 수정
|
||||
|
||||
// READ ONE
|
||||
router.get('/:factory_id', verifyToken, factoryInfoController.getFactoryInfoById); // ← 수정
|
||||
|
||||
// UPDATE
|
||||
router.put('/:factory_id', verifyToken, factoryInfoController.updateFactoryInfo); // ← 수정
|
||||
|
||||
// DELETE
|
||||
router.delete('/:factory_id', verifyToken, factoryInfoController.removeFactoryInfo); // ← 수정
|
||||
|
||||
module.exports = router;
|
||||
@@ -1,8 +0,0 @@
|
||||
// routes/pingRoutes.js
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const pingController = require('../controllers/pingController');
|
||||
|
||||
router.get('/', pingController.ping);
|
||||
|
||||
module.exports = router;
|
||||
@@ -1,55 +0,0 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const pipeSpecController = require('../controllers/pipeSpecController');
|
||||
const auth = require('../middlewares/auth');
|
||||
const { requireAccess } = require('../middlewares/access');
|
||||
|
||||
// ✅ 전체 조회 (모든 사용자 가능)
|
||||
router.get(
|
||||
'/',
|
||||
auth,
|
||||
requireAccess('worker', 'group_leader', 'support_team', 'admin', 'system'),
|
||||
pipeSpecController.getAll
|
||||
);
|
||||
|
||||
// ✅ 재질 목록
|
||||
router.get(
|
||||
'/materials',
|
||||
auth,
|
||||
requireAccess('worker', 'group_leader', 'support_team', 'admin', 'system'),
|
||||
pipeSpecController.getMaterials
|
||||
);
|
||||
|
||||
// ✅ 직경 목록
|
||||
router.get(
|
||||
'/diameters',
|
||||
auth,
|
||||
requireAccess('worker', 'group_leader', 'support_team', 'admin', 'system'),
|
||||
pipeSpecController.getDiameters
|
||||
);
|
||||
|
||||
// ✅ 스케줄 목록
|
||||
router.get(
|
||||
'/schedules',
|
||||
auth,
|
||||
requireAccess('worker', 'group_leader', 'support_team', 'admin', 'system'),
|
||||
pipeSpecController.getSchedules
|
||||
);
|
||||
|
||||
// ✅ 등록 (시스템 또는 관리자만)
|
||||
router.post(
|
||||
'/',
|
||||
auth,
|
||||
requireAccess('system', 'admin'),
|
||||
pipeSpecController.create
|
||||
);
|
||||
|
||||
// ✅ 삭제 (시스템 또는 관리자만)
|
||||
router.delete(
|
||||
'/:spec_id',
|
||||
auth,
|
||||
requireAccess('system', 'admin'),
|
||||
pipeSpecController.remove
|
||||
);
|
||||
|
||||
module.exports = router;
|
||||
@@ -1,21 +0,0 @@
|
||||
// routes/processRoutes.js
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const processController = require('../controllers/processController');
|
||||
|
||||
// CREATE
|
||||
router.post('/', processController.createProcess);
|
||||
|
||||
// READ ALL
|
||||
router.get('/', processController.getAllProcesses);
|
||||
|
||||
// READ ONE
|
||||
router.get('/:process_id', processController.getProcessById);
|
||||
|
||||
// UPDATE
|
||||
router.put('/:process_id', processController.updateProcess);
|
||||
|
||||
// DELETE
|
||||
router.delete('/:process_id', processController.removeProcess);
|
||||
|
||||
module.exports = router;
|
||||
@@ -36,6 +36,9 @@ router.get('/monthly-comparison', workAnalysisController.getMonthlyComparison);
|
||||
// 🎯 작업자별 전문분야 분석
|
||||
router.get('/worker-specialization', workAnalysisController.getWorkerSpecialization);
|
||||
|
||||
// 🏗️ 프로젝트별-작업별 시간 분석 (총시간, 정규시간, 에러시간)
|
||||
router.get('/project-worktype-analysis', workAnalysisController.getProjectWorkTypeAnalysis);
|
||||
|
||||
// 📋 헬스체크 및 API 정보
|
||||
router.get('/health', (req, res) => {
|
||||
res.json({
|
||||
@@ -52,7 +55,8 @@ router.get('/health', (req, res) => {
|
||||
'GET /work-analysis/weekday-pattern - 요일별 패턴',
|
||||
'GET /work-analysis/error-analysis - 에러 분석',
|
||||
'GET /work-analysis/monthly-comparison - 월별 비교',
|
||||
'GET /work-analysis/worker-specialization - 작업자 전문분야'
|
||||
'GET /work-analysis/worker-specialization - 작업자 전문분야',
|
||||
'GET /work-analysis/project-worktype-analysis - 프로젝트별-작업별 시간 분석'
|
||||
],
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
|
||||
23
api.hyungi.net/routes/workReportAnalysisRoutes.js
Normal file
23
api.hyungi.net/routes/workReportAnalysisRoutes.js
Normal file
@@ -0,0 +1,23 @@
|
||||
// routes/workReportAnalysisRoutes.js - 데일리 워크 레포트 분석 라우트
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const workReportAnalysisController = require('../controllers/workReportAnalysisController');
|
||||
const { verifyToken, requireAdmin } = require('../middlewares/authMiddleware');
|
||||
|
||||
// 🔒 모든 분석 라우트에 인증 + Admin 권한 필요
|
||||
router.use(verifyToken);
|
||||
router.use(requireAdmin);
|
||||
|
||||
// 📋 분석용 필터 데이터 조회 (프로젝트, 작업자, 작업유형 목록)
|
||||
router.get('/filters', workReportAnalysisController.getAnalysisFilters);
|
||||
|
||||
// 📊 기간별 종합 분석
|
||||
router.get('/period', workReportAnalysisController.getAnalyticsByPeriod);
|
||||
|
||||
// 📈 프로젝트별 상세 분석
|
||||
router.get('/project', workReportAnalysisController.getProjectAnalysis);
|
||||
|
||||
// 👤 작업자별 상세 분석
|
||||
router.get('/worker', workReportAnalysisController.getWorkerAnalysis);
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user