refactor(backend): 작업 보고서 통계/요약 API 구조 개선

- dailyWorkReportController의 통계/요약 함수를 C-S-M 아키텍처에 맞게 리팩토링
- Model 계층의 콜백 기반 함수를 Promise 기반으로 전환
- API의 일관성 및 유지보수성 향상
This commit is contained in:
2025-07-28 12:35:50 +09:00
parent 5a68ced13b
commit 71c06f38b1
3 changed files with 134 additions and 175 deletions

View File

@@ -204,10 +204,71 @@ const removeDailyWorkReportService = async (reportId, userInfo) => {
}
};
/**
* 기간별 작업 보고서 통계를 조회하는 비즈니스 로직을 처리합니다.
* @param {object} queryParams - 컨트롤러에서 전달된 쿼리 파라미터 (start_date, end_date)
* @returns {Promise<object>} 통계 데이터
*/
const getStatisticsService = async (queryParams) => {
const { start_date, end_date } = queryParams;
if (!start_date || !end_date) {
throw new Error('통계 조회를 위해 시작일(start_date)과 종료일(end_date)이 모두 필요합니다.');
}
console.log(`📈 [Service] 통계 조회 요청: ${start_date} ~ ${end_date}`);
try {
// 모델의 getStatistics 함수가 Promise를 반환하도록 수정 필요
const statsData = await dailyWorkReportModel.getStatistics(start_date, end_date);
console.log('✅ [Service] 통계 조회 성공');
return {
...statsData,
metadata: {
period: `${start_date} ~ ${end_date}`,
timestamp: new Date().toISOString()
}
};
} catch (error) {
console.error('[Service] 통계 조회 중 오류 발생:', error);
throw error;
}
};
/**
* 일일 또는 작업자별 작업 요약 정보를 조회하는 비즈니스 로직을 처리합니다.
* @param {object} queryParams - 컨트롤러에서 전달된 쿼리 파라미터 (date 또는 worker_id)
* @returns {Promise<object>} 요약 데이터
*/
const getSummaryService = async (queryParams) => {
const { date, worker_id } = queryParams;
if (!date && !worker_id) {
throw new Error('일일 또는 작업자별 요약 조회를 위해 날짜(date) 또는 작업자 ID(worker_id)가 필요합니다.');
}
try {
if (date) {
console.log(`📊 [Service] 일일 요약 조회 요청: date=${date}`);
// 모델의 getSummaryByDate 함수가 Promise를 반환하도록 수정 필요
return await dailyWorkReportModel.getSummaryByDate(date);
} else { // worker_id
console.log(`📊 [Service] 작업자별 요약 조회 요청: worker_id=${worker_id}`);
// 모델의 getSummaryByWorker 함수가 Promise를 반환하도록 수정 필요
return await dailyWorkReportModel.getSummaryByWorker(worker_id);
}
} catch (error) {
console.error('[Service] 요약 정보 조회 중 오류 발생:', error);
throw error;
}
};
module.exports = {
createDailyWorkReportService,
getDailyWorkReportsService,
updateWorkReportService,
removeDailyWorkReportService,
getStatisticsService,
getSummaryService,
};