// /js/report-viewer-api.js import { apiGet } from './api-helper.js'; import { getUser } from './auth.js'; /** * 보고서 조회를 위한 마스터 데이터를 로드합니다. (작업 유형, 상태 등) * 실패 시 기본값을 반환할 수 있도록 개별적으로 처리합니다. * @returns {Promise} - 각 마스터 데이터 배열을 포함하는 객체 */ 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} - 작업 보고서 데이터 배열 */ 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('서버에서 데이터를 가져오는 데 실패했습니다.'); } }