Files
TK-FB-Project/synology_deployment/api/services/analysisService.js
Hyungi Ahn a9bce9d20b fix: 캘린더 모달 중복 카드 문제 및 삭제 권한 개선
- monthly_worker_status 조회 시 GROUP BY로 중복 데이터 합산
- 작업보고서 삭제 권한을 그룹장 이상으로 제한 (admin, system, group_leader)
- 중복 데이터 정리를 위한 마이그레이션 SQL 추가 (009_fix_duplicate_monthly_status.sql)
- synology_deployment 버전에도 동일 수정 적용
2025-12-02 13:08:44 +09:00

48 lines
1.6 KiB
JavaScript

// /services/analysisService.js
const analysisModel = require('../models/analysisModel');
/**
* 기간별 프로젝트 분석 데이터를 조회하는 비즈니스 로직을 처리합니다.
* @param {string} startDate - 시작일 (YYYY-MM-DD)
* @param {string} endDate - 종료일 (YYYY-MM-DD)
* @returns {Promise<object>} - 가공된 분석 데이터
*/
const getAnalysisService = async (startDate, endDate) => {
if (!startDate || !endDate) {
throw new Error('분석을 위해 시작일과 종료일이 모두 필요합니다.');
}
try {
const analysisData = await analysisModel.getAnalysis(startDate, endDate);
// 모델에서 받은 데이터를 그대로 반환하거나, 필요 시 추가 가공을 할 수 있습니다.
// 예를 들어, 비율(percentage) 계산을 여기서 수행할 수 있습니다.
const { summary, byProject, byWorker, byTask, details } = analysisData;
const totalHours = summary.totalHours || 0;
const addPercentage = (item) => ({
...item,
hours: parseFloat(item.hours.toFixed(1)),
percentage: totalHours > 0 ? parseFloat((item.hours / totalHours * 100).toFixed(1)) : 0
});
return {
summary: {
...summary,
totalHours: parseFloat(totalHours.toFixed(1))
},
byProject: byProject.map(addPercentage),
byWorker: byWorker.map(addPercentage),
byTask: byTask.map(addPercentage),
details: details.map(d => ({...d, work_hours: parseFloat(d.work_hours.toFixed(1))})),
};
} catch (error) {
console.error('[Service] 분석 데이터 조회 중 오류 발생:', error);
throw error;
}
};
module.exports = {
getAnalysisService
};