48 lines
1.6 KiB
JavaScript
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
|
|
};
|