Files
Hyungi Ahn 1fd6253fbc feat(sprint-004): 월간 비교·확인·정산 백엔드 (Section A) + Mock 해제
Backend:
- monthly_work_confirmations 테이블 마이그레이션
- monthlyComparisonModel: 비교 쿼리 8개 (보고서/근태/확인 병렬 조회)
- monthlyComparisonController: 5 API (my-records/records/confirm/all-status/export)
- 일별 7상태 판정 (match/mismatch/report_only/attend_only/vacation/holiday/none)
- 확인/반려 UPSERT + 반려 시 알림 (단일 트랜잭션)
- 엑셀 2시트 (exceljs) + 헤더 스타일 + 불일치/휴가 행 색상
- support_team+ 권한 체크 (all-status, export)
- exceljs 의존성 추가

Frontend:
- monthly-comparison.js MOCK_ENABLED = false (API 연결)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 13:26:25 +09:00

51 lines
1.5 KiB
JSON

{
"name": "hyungi-api",
"version": "2.2.0",
"main": "index.js",
"scripts": {
"start": "pm2-runtime start ecosystem.config.js --env production",
"dev": "pm2-runtime start ecosystem.config.js --env development",
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"test:unit": "jest tests/unit",
"test:integration": "jest tests/integration",
"test:verbose": "jest --verbose",
"setup": "node ../setup.js",
"db:migrate": "knex migrate:latest --knexfile knexfile.js",
"db:migrate:make": "knex migrate:make --knexfile knexfile.js",
"db:rollback": "knex migrate:rollback --knexfile knexfile.js",
"db:seed": "knex seed:run --knexfile knexfile.js",
"db:seed:make": "knex seed:make --knexfile knexfile.js"
},
"dependencies": {
"@simplewebauthn/server": "^13.1.1",
"async-retry": "^1.3.3",
"axios": "^1.6.7",
"bcryptjs": "^2.4.3",
"compression": "^1.8.1",
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"exceljs": "^4.4.0",
"express": "^4.18.2",
"express-rate-limit": "^7.5.1",
"express-validator": "^7.2.1",
"helmet": "^7.2.0",
"jsonwebtoken": "^9.0.0",
"knex": "^3.1.0",
"multer": "^1.4.5-lts.1",
"mysql2": "^3.14.1",
"node-cache": "^5.1.2",
"pm2": "^5.3.0",
"qrcode": "^1.5.4",
"redis": "^5.9.0",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.1"
},
"devDependencies": {
"@types/jest": "^29.5.12",
"jest": "^29.7.0",
"supertest": "^7.0.0"
}
}