Files
TK-FB-Project/web-ui/js/project-analysis-api.js
hyungi 7c5a985166 refactor(frontend): 프로젝트 분석 페이지 전체 리팩토링
- 600줄에 달하는 project-analysis.js 파일을 API, Data, UI, Controller 네 개의 모듈로 분리
- 복잡한 데이터 처리 로직을 data 모듈로 위임하고, UI 렌더링 코드를 ui 모듈로 분리하여 관심사 분리 원칙(SoC) 적용
- 전역 상태를 최소화하고 데이터 흐름을 명확하게 개선하여 유지보수성 및 안정성 향상
2025-07-28 14:22:36 +09:00

44 lines
1.8 KiB
JavaScript

// /js/project-analysis-api.js
import { apiGet } from './api-helper.js';
/**
* 분석 페이지에 필요한 모든 초기 데이터(마스터 데이터)를 병렬로 가져옵니다.
* @returns {Promise<{workers: Array, projects: Array, tasks: Array}>}
*/
export async function getMasterData() {
try {
const [workers, projects, tasks] = await Promise.all([
apiGet('/workers'),
apiGet('/projects'),
apiGet('/tasks')
]);
return { workers, projects, tasks };
} catch (error) {
console.error('마스터 데이터 로딩 실패:', error);
// 하나라도 실패하면 페이지 기능에 문제가 생길 수 있으므로 에러를 던집니다.
throw new Error('페이지 초기화에 필요한 데이터를 불러오는 데 실패했습니다.');
}
}
/**
* 지정된 기간의 작업 보고서 데이터를 가져옵니다.
* 백엔드에 집계 API가 있다면 그쪽을 사용하는 것이 더 효율적입니다.
* (예: /api/analysis/reports?startDate=...&endDate=...)
* 현재는 기존 방식을 유지합니다.
* @param {string} startDate - 시작일 (YYYY-MM-DD)
* @param {string} endDate - 종료일 (YYYY-MM-DD)
* @returns {Promise<Array>}
*/
export async function getWorkReports(startDate, endDate) {
try {
// API 엔드포인트를 명확하게 수정합니다.
// 기존: /workreports?start=...
// 변경: /daily-work-reports/search?startDate=...&endDate=... (가정)
// 우선 기존 URL 구조를 최대한 따르되, 좀 더 명시적인 경로로 변경 제안
const reports = await apiGet(`/workreports/search?startDate=${startDate}&endDate=${endDate}`);
return reports;
} catch (error) {
console.error('작업 보고서 데이터 로딩 실패:', error);
throw new Error(`작업 보고서 데이터를 불러오는 데 실패했습니다: ${error.message}`);
}
}