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:
Hyungi Ahn
2025-11-03 09:26:50 +09:00
parent 2a3feca45b
commit 94ecc7333d
71 changed files with 15664 additions and 4385 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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()
});

View 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;