91 lines
3.3 KiB
JavaScript
91 lines
3.3 KiB
JavaScript
// /js/report-viewer-api.js
|
|
import { apiGet } from './api-helper.js';
|
|
import { getUser } from './auth.js';
|
|
|
|
/**
|
|
* 보고서 조회를 위한 마스터 데이터를 로드합니다. (작업 유형, 상태 등)
|
|
* 실패 시 기본값을 반환할 수 있도록 개별적으로 처리합니다.
|
|
* @returns {Promise<object>} - 각 마스터 데이터 배열을 포함하는 객체
|
|
*/
|
|
export async function loadMasterData() {
|
|
const masterData = {
|
|
workTypes: [],
|
|
workStatusTypes: [],
|
|
errorTypes: []
|
|
};
|
|
try {
|
|
// Promise.allSettled를 사용해 일부 API가 실패해도 전체가 중단되지 않도록 함
|
|
const results = await Promise.allSettled([
|
|
apiGet('/daily-work-reports/work-types'),
|
|
apiGet('/daily-work-reports/work-status-types'),
|
|
apiGet('/daily-work-reports/error-types')
|
|
]);
|
|
|
|
if (results[0].status === 'fulfilled') masterData.workTypes = results[0].value;
|
|
if (results[1].status === 'fulfilled') masterData.workStatusTypes = results[1].value;
|
|
if (results[2].status === 'fulfilled') masterData.errorTypes = results[2].value;
|
|
|
|
return masterData;
|
|
} catch (error) {
|
|
console.error('마스터 데이터 로딩 중 심각한 오류 발생:', error);
|
|
// 최소한의 기본값이라도 반환
|
|
return masterData;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 사용자의 권한을 확인하여 적절한 API 엔드포인트와 파라미터를 결정합니다.
|
|
* @param {string} selectedDate - 조회할 날짜
|
|
* @returns {string} - 호출할 API URL
|
|
*/
|
|
function getReportApiUrl(selectedDate) {
|
|
const user = getUser();
|
|
|
|
// 관리자(admin, system)는 모든 데이터를 조회
|
|
if (user && (user.role === 'admin' || user.role === 'system')) {
|
|
// 백엔드에서 GET /daily-work-reports?date=YYYY-MM-DD 요청 시
|
|
// 권한을 확인하고 모든 데이터를 내려준다고 가정
|
|
return `/daily-work-reports?date=${selectedDate}`;
|
|
}
|
|
|
|
// 그 외 사용자(leader, user)는 본인이 생성한 데이터만 조회
|
|
// 백엔드에서 동일한 엔드포인트로 요청 시, 권한을 확인하고
|
|
// 본인 데이터만 필터링해서 내려준다고 가정
|
|
// (만약 엔드포인트가 다르다면 이 부분을 수정해야 함)
|
|
return `/daily-work-reports?date=${selectedDate}`;
|
|
}
|
|
|
|
|
|
/**
|
|
* 특정 날짜의 작업 보고서 데이터를 서버에서 가져옵니다.
|
|
* @param {string} selectedDate - 조회할 날짜 (YYYY-MM-DD)
|
|
* @returns {Promise<Array>} - 작업 보고서 데이터 배열
|
|
*/
|
|
export async function fetchReportData(selectedDate) {
|
|
if (!selectedDate) {
|
|
throw new Error('조회할 날짜가 선택되지 않았습니다.');
|
|
}
|
|
|
|
const apiUrl = getReportApiUrl(selectedDate);
|
|
|
|
try {
|
|
const rawData = await apiGet(apiUrl);
|
|
|
|
// 서버 응답이 { success: true, data: [...] } 형태일 경우와 [...] 형태일 경우 모두 처리
|
|
if (rawData && rawData.success && Array.isArray(rawData.data)) {
|
|
return rawData.data;
|
|
}
|
|
if (Array.isArray(rawData)) {
|
|
return rawData;
|
|
}
|
|
|
|
// 예상치 못한 형식의 응답
|
|
console.warn('예상치 못한 형식의 API 응답:', rawData);
|
|
return [];
|
|
|
|
} catch (error) {
|
|
console.error(`${selectedDate}의 작업 보고서 조회 실패:`, error);
|
|
throw new Error('서버에서 데이터를 가져오는 데 실패했습니다.');
|
|
}
|
|
}
|