Files
tk-factory-services/system1-factory/api/coverage/coverage-summary.json
Hyungi Ahn 550633b89d feat: 3-System 분리 프로젝트 초기 코드 작성
TK-FB(공장관리+신고)와 M-Project(부적합관리)를 3개 독립 시스템으로
분리하기 위한 전체 코드 구조 작성.
- SSO 인증 서비스 (bcrypt + pbkdf2 이중 해시 지원)
- System 1: 공장관리 (TK-FB 기반, 신고 코드 제거)
- System 2: 신고 (TK-FB에서 workIssue 코드 추출)
- System 3: 부적합관리 (M-Project 기반)
- Gateway 포털 (path-based 라우팅)
- 통합 docker-compose.yml 및 배포 스크립트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 14:40:11 +09:00

55 lines
17 KiB
JSON

{"total": {"lines":{"total":3490,"covered":163,"skipped":0,"pct":4.67},"statements":{"total":3559,"covered":165,"skipped":0,"pct":4.63},"functions":{"total":516,"covered":34,"skipped":0,"pct":6.58},"branches":{"total":1526,"covered":60,"skipped":0,"pct":3.93},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/analysisController.js": {"lines":{"total":7,"covered":0,"skipped":0,"pct":0},"functions":{"total":1,"covered":0,"skipped":0,"pct":0},"statements":{"total":7,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/attendanceController.js": {"lines":{"total":37,"covered":0,"skipped":0,"pct":0},"functions":{"total":9,"covered":0,"skipped":0,"pct":0},"statements":{"total":37,"covered":0,"skipped":0,"pct":0},"branches":{"total":8,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/authController.js": {"lines":{"total":55,"covered":0,"skipped":0,"pct":0},"functions":{"total":4,"covered":0,"skipped":0,"pct":0},"statements":{"total":55,"covered":0,"skipped":0,"pct":0},"branches":{"total":22,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/dailyIssueReportController.js": {"lines":{"total":15,"covered":0,"skipped":0,"pct":0},"functions":{"total":3,"covered":0,"skipped":0,"pct":0},"statements":{"total":15,"covered":0,"skipped":0,"pct":0},"branches":{"total":2,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/dailyWorkReportController.js": {"lines":{"total":317,"covered":0,"skipped":0,"pct":0},"functions":{"total":57,"covered":0,"skipped":0,"pct":0},"statements":{"total":328,"covered":0,"skipped":0,"pct":0},"branches":{"total":163,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/issueTypeController.js": {"lines":{"total":16,"covered":0,"skipped":0,"pct":0},"functions":{"total":4,"covered":0,"skipped":0,"pct":0},"statements":{"total":16,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/monthlyStatusController.js": {"lines":{"total":63,"covered":0,"skipped":0,"pct":0},"functions":{"total":9,"covered":0,"skipped":0,"pct":0},"statements":{"total":64,"covered":0,"skipped":0,"pct":0},"branches":{"total":32,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/projectController.js": {"lines":{"total":61,"covered":0,"skipped":0,"pct":0},"functions":{"total":18,"covered":0,"skipped":0,"pct":0},"statements":{"total":67,"covered":0,"skipped":0,"pct":0},"branches":{"total":24,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/systemController.js": {"lines":{"total":123,"covered":0,"skipped":0,"pct":0},"functions":{"total":13,"covered":0,"skipped":0,"pct":0},"statements":{"total":124,"covered":0,"skipped":0,"pct":0},"branches":{"total":66,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/toolsController.js": {"lines":{"total":20,"covered":0,"skipped":0,"pct":0},"functions":{"total":5,"covered":0,"skipped":0,"pct":0},"statements":{"total":20,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/uploadController.js": {"lines":{"total":9,"covered":0,"skipped":0,"pct":0},"functions":{"total":2,"covered":0,"skipped":0,"pct":0},"statements":{"total":9,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/userController.js": {"lines":{"total":183,"covered":0,"skipped":0,"pct":0},"functions":{"total":7,"covered":0,"skipped":0,"pct":0},"statements":{"total":183,"covered":0,"skipped":0,"pct":0},"branches":{"total":125,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/workAnalysisController.js": {"lines":{"total":198,"covered":0,"skipped":0,"pct":0},"functions":{"total":20,"covered":0,"skipped":0,"pct":0},"statements":{"total":198,"covered":0,"skipped":0,"pct":0},"branches":{"total":34,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/workReportAnalysisController.js": {"lines":{"total":89,"covered":0,"skipped":0,"pct":0},"functions":{"total":4,"covered":0,"skipped":0,"pct":0},"statements":{"total":89,"covered":0,"skipped":0,"pct":0},"branches":{"total":20,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/workReportController.js": {"lines":{"total":29,"covered":0,"skipped":0,"pct":0},"functions":{"total":7,"covered":0,"skipped":0,"pct":0},"statements":{"total":29,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/controllers/workerController.js": {"lines":{"total":67,"covered":0,"skipped":0,"pct":0},"functions":{"total":13,"covered":0,"skipped":0,"pct":0},"statements":{"total":71,"covered":0,"skipped":0,"pct":0},"branches":{"total":25,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/middlewares/access.js": {"lines":{"total":5,"covered":0,"skipped":0,"pct":0},"functions":{"total":2,"covered":0,"skipped":0,"pct":0},"statements":{"total":5,"covered":0,"skipped":0,"pct":0},"branches":{"total":4,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/middlewares/accessMiddleware.js": {"lines":{"total":4,"covered":0,"skipped":0,"pct":0},"functions":{"total":1,"covered":0,"skipped":0,"pct":0},"statements":{"total":4,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/middlewares/activityLogger.js": {"lines":{"total":21,"covered":0,"skipped":0,"pct":0},"functions":{"total":4,"covered":0,"skipped":0,"pct":0},"statements":{"total":22,"covered":0,"skipped":0,"pct":0},"branches":{"total":10,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/middlewares/auth.js": {"lines":{"total":84,"covered":0,"skipped":0,"pct":0},"functions":{"total":7,"covered":0,"skipped":0,"pct":0},"statements":{"total":85,"covered":0,"skipped":0,"pct":0},"branches":{"total":51,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/middlewares/authMiddleware.js": {"lines":{"total":2,"covered":0,"skipped":0,"pct":0},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":2,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/middlewares/errorHandler.js": {"lines":{"total":25,"covered":0,"skipped":0,"pct":0},"functions":{"total":5,"covered":0,"skipped":0,"pct":0},"statements":{"total":25,"covered":0,"skipped":0,"pct":0},"branches":{"total":20,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/WorkAnalysis.js": {"lines":{"total":58,"covered":0,"skipped":0,"pct":0},"functions":{"total":21,"covered":0,"skipped":0,"pct":0},"statements":{"total":67,"covered":0,"skipped":0,"pct":0},"branches":{"total":129,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/analysisModel.js": {"lines":{"total":16,"covered":0,"skipped":0,"pct":0},"functions":{"total":1,"covered":0,"skipped":0,"pct":0},"statements":{"total":16,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/attendanceModel.js": {"lines":{"total":65,"covered":0,"skipped":0,"pct":0},"functions":{"total":9,"covered":0,"skipped":0,"pct":0},"statements":{"total":65,"covered":0,"skipped":0,"pct":0},"branches":{"total":21,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/dailyIssueReportModel.js": {"lines":{"total":59,"covered":0,"skipped":0,"pct":0},"functions":{"total":9,"covered":0,"skipped":0,"pct":0},"statements":{"total":61,"covered":0,"skipped":0,"pct":0},"branches":{"total":1,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/dailyWorkReportModel.js": {"lines":{"total":426,"covered":0,"skipped":0,"pct":0},"functions":{"total":41,"covered":0,"skipped":0,"pct":0},"statements":{"total":430,"covered":0,"skipped":0,"pct":0},"branches":{"total":78,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/issueTypeModel.js": {"lines":{"total":26,"covered":0,"skipped":0,"pct":0},"functions":{"total":4,"covered":0,"skipped":0,"pct":0},"statements":{"total":26,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/monthlyStatusModel.js": {"lines":{"total":42,"covered":0,"skipped":0,"pct":0},"functions":{"total":5,"covered":0,"skipped":0,"pct":0},"statements":{"total":42,"covered":0,"skipped":0,"pct":0},"branches":{"total":3,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/projectModel.js": {"lines":{"total":40,"covered":0,"skipped":0,"pct":0},"functions":{"total":6,"covered":0,"skipped":0,"pct":0},"statements":{"total":40,"covered":0,"skipped":0,"pct":0},"branches":{"total":5,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/toolsModel.js": {"lines":{"total":34,"covered":0,"skipped":0,"pct":0},"functions":{"total":5,"covered":0,"skipped":0,"pct":0},"statements":{"total":34,"covered":0,"skipped":0,"pct":0},"branches":{"total":2,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/uploadModel.js": {"lines":{"total":16,"covered":0,"skipped":0,"pct":0},"functions":{"total":2,"covered":0,"skipped":0,"pct":0},"statements":{"total":16,"covered":0,"skipped":0,"pct":0},"branches":{"total":2,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/userModel.js": {"lines":{"total":27,"covered":0,"skipped":0,"pct":0},"functions":{"total":4,"covered":0,"skipped":0,"pct":0},"statements":{"total":27,"covered":0,"skipped":0,"pct":0},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/workReportModel.js": {"lines":{"total":61,"covered":10,"skipped":0,"pct":16.39},"functions":{"total":8,"covered":0,"skipped":0,"pct":0},"statements":{"total":61,"covered":10,"skipped":0,"pct":16.39},"branches":{"total":26,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/models/workerModel.js": {"lines":{"total":54,"covered":0,"skipped":0,"pct":0},"functions":{"total":6,"covered":0,"skipped":0,"pct":0},"statements":{"total":55,"covered":0,"skipped":0,"pct":0},"branches":{"total":17,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/analysisService.js": {"lines":{"total":19,"covered":0,"skipped":0,"pct":0},"functions":{"total":3,"covered":0,"skipped":0,"pct":0},"statements":{"total":20,"covered":0,"skipped":0,"pct":0},"branches":{"total":8,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/attendanceService.js": {"lines":{"total":93,"covered":0,"skipped":0,"pct":0},"functions":{"total":9,"covered":0,"skipped":0,"pct":0},"statements":{"total":93,"covered":0,"skipped":0,"pct":0},"branches":{"total":26,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/auth.service.js": {"lines":{"total":38,"covered":0,"skipped":0,"pct":0},"functions":{"total":2,"covered":0,"skipped":0,"pct":0},"statements":{"total":38,"covered":0,"skipped":0,"pct":0},"branches":{"total":32,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/dailyIssueReportService.js": {"lines":{"total":43,"covered":0,"skipped":0,"pct":0},"functions":{"total":4,"covered":0,"skipped":0,"pct":0},"statements":{"total":44,"covered":0,"skipped":0,"pct":0},"branches":{"total":20,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/dailyWorkReportService.js": {"lines":{"total":115,"covered":0,"skipped":0,"pct":0},"functions":{"total":7,"covered":0,"skipped":0,"pct":0},"statements":{"total":116,"covered":0,"skipped":0,"pct":0},"branches":{"total":71,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/issueTypeService.js": {"lines":{"total":68,"covered":0,"skipped":0,"pct":0},"functions":{"total":12,"covered":0,"skipped":0,"pct":0},"statements":{"total":72,"covered":0,"skipped":0,"pct":0},"branches":{"total":32,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/toolsService.js": {"lines":{"total":83,"covered":0,"skipped":0,"pct":0},"functions":{"total":15,"covered":0,"skipped":0,"pct":0},"statements":{"total":88,"covered":0,"skipped":0,"pct":0},"branches":{"total":36,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/uploadService.js": {"lines":{"total":29,"covered":0,"skipped":0,"pct":0},"functions":{"total":6,"covered":0,"skipped":0,"pct":0},"statements":{"total":31,"covered":0,"skipped":0,"pct":0},"branches":{"total":9,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/services/workReportService.js": {"lines":{"total":121,"covered":111,"skipped":0,"pct":91.73},"functions":{"total":21,"covered":21,"skipped":0,"pct":100},"statements":{"total":128,"covered":113,"skipped":0,"pct":88.28},"branches":{"total":52,"covered":43,"skipped":0,"pct":82.69}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/utils/access.js": {"lines":{"total":38,"covered":0,"skipped":0,"pct":0},"functions":{"total":12,"covered":0,"skipped":0,"pct":0},"statements":{"total":40,"covered":0,"skipped":0,"pct":0},"branches":{"total":31,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/utils/cache.js": {"lines":{"total":103,"covered":0,"skipped":0,"pct":0},"functions":{"total":22,"covered":0,"skipped":0,"pct":0},"statements":{"total":103,"covered":0,"skipped":0,"pct":0},"branches":{"total":56,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/utils/errorHandler.js": {"lines":{"total":40,"covered":0,"skipped":0,"pct":0},"functions":{"total":9,"covered":0,"skipped":0,"pct":0},"statements":{"total":40,"covered":0,"skipped":0,"pct":0},"branches":{"total":29,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/utils/errors.js": {"lines":{"total":19,"covered":12,"skipped":0,"pct":63.15},"functions":{"total":11,"covered":4,"skipped":0,"pct":36.36},"statements":{"total":19,"covered":12,"skipped":0,"pct":63.15},"branches":{"total":26,"covered":5,"skipped":0,"pct":19.23}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/utils/logger.js": {"lines":{"total":47,"covered":30,"skipped":0,"pct":63.82},"functions":{"total":13,"covered":9,"skipped":0,"pct":69.23},"statements":{"total":47,"covered":30,"skipped":0,"pct":63.82},"branches":{"total":37,"covered":12,"skipped":0,"pct":32.43}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/utils/queryOptimizer.js": {"lines":{"total":116,"covered":0,"skipped":0,"pct":0},"functions":{"total":20,"covered":0,"skipped":0,"pct":0},"statements":{"total":120,"covered":0,"skipped":0,"pct":0},"branches":{"total":51,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/utils/responseFormatter.js": {"lines":{"total":56,"covered":0,"skipped":0,"pct":0},"functions":{"total":21,"covered":0,"skipped":0,"pct":0},"statements":{"total":56,"covered":0,"skipped":0,"pct":0},"branches":{"total":26,"covered":0,"skipped":0,"pct":0}}
,"/Users/hyungiahn/Documents/code/TK-FB-Project/api.hyungi.net/utils/validator.js": {"lines":{"total":108,"covered":0,"skipped":0,"pct":0},"functions":{"total":13,"covered":0,"skipped":0,"pct":0},"statements":{"total":109,"covered":0,"skipped":0,"pct":0},"branches":{"total":94,"covered":0,"skipped":0,"pct":0}}
}