refactor(frontend): 프로젝트 분석 페이지 전체 리팩토링
- 600줄에 달하는 project-analysis.js 파일을 API, Data, UI, Controller 네 개의 모듈로 분리 - 복잡한 데이터 처리 로직을 data 모듈로 위임하고, UI 렌더링 코드를 ui 모듈로 분리하여 관심사 분리 원칙(SoC) 적용 - 전역 상태를 최소화하고 데이터 흐름을 명확하게 개선하여 유지보수성 및 안정성 향상
This commit is contained in:
44
web-ui/js/project-analysis-api.js
Normal file
44
web-ui/js/project-analysis-api.js
Normal file
@@ -0,0 +1,44 @@
|
||||
// /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}`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user