refactor: 프론트엔드 SSO 인증 통합 및 API 경로 정리

- Gateway 로그인/포탈 페이지 SSO 연동
- System1 web/fastapi-bridge API base URL 동적 설정
- SSO 토큰 기반 인증 흐름 통일
- deprecated JS 파일 삭제

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-06 23:18:09 +09:00
parent ec755ed52f
commit 61c810bd47
63 changed files with 255 additions and 1357 deletions

View File

@@ -18,13 +18,11 @@ class WorkAnalysisMainController {
* 초기화
*/
init() {
console.log('🚀 작업 분석 메인 컨트롤러 초기화');
this.setupEventListeners();
this.setupStateListeners();
this.initializeUI();
console.log('✅ 작업 분석 메인 컨트롤러 초기화 완료');
}
/**
@@ -157,16 +155,14 @@ class WorkAnalysisMainController {
const startDate = document.getElementById('startDate').value;
const endDate = document.getElementById('endDate').value;
console.log('🔄 기간 확정 처리 시작:', startDate, '~', endDate);
this.state.confirmPeriod(startDate, endDate);
this.showToast('기간이 확정되었습니다', 'success');
console.log('✅ 기간 확정 완료 - 각 분석 버튼을 눌러서 데이터를 확인하세요');
} catch (error) {
console.error(' 기간 확정 처리 오류:', error);
console.error(' 기간 확정 처리 오류:', error);
this.state.setError(error);
this.showToast(error.message, 'error');
}
@@ -222,13 +218,10 @@ class WorkAnalysisMainController {
const { start, end } = currentState.confirmedPeriod;
try {
console.log('📊 기본 통계 로딩 시작 - 기간:', start, '~', end);
this.state.startLoading('기본 통계를 로딩 중입니다...');
console.log('🌐 API 호출 전 - getBasicStats 호출...');
const statsResponse = await this.api.getBasicStats(start, end);
console.log('📊 기본 통계 API 응답:', statsResponse);
if (statsResponse.success && statsResponse.data) {
const stats = statsResponse.data;
@@ -250,7 +243,6 @@ class WorkAnalysisMainController {
this.state.setCache('basicStats', cardData);
this.updateResultCards(cardData);
console.log('✅ 기본 통계 로딩 완료:', cardData);
} else {
// 기본값으로 카드 업데이트
const defaultData = {
@@ -261,11 +253,11 @@ class WorkAnalysisMainController {
errorRate: 0
};
this.updateResultCards(defaultData);
console.warn('⚠️ 기본 통계 데이터가 없어서 기본값으로 설정');
console.warn(' 기본 통계 데이터가 없어서 기본값으로 설정');
}
} catch (error) {
console.error(' 기본 통계 로드 실패:', error);
console.error(' 기본 통계 로드 실패:', error);
// 에러 시에도 기본값으로 카드 업데이트
const defaultData = {
totalHours: 0,
@@ -318,7 +310,6 @@ class WorkAnalysisMainController {
}
]);
console.log('🔍 기간별 작업 현황 API 응답:', batchData);
// 데이터 처리
const recentWorkData = batchData.recentWork?.success ? batchData.recentWork.data.data : [];
@@ -332,7 +323,7 @@ class WorkAnalysisMainController {
this.showToast('기간별 작업 현황 분석이 완료되었습니다', 'success');
} catch (error) {
console.error(' 기간별 작업 현황 분석 오류:', error);
console.error(' 기간별 작업 현황 분석 오류:', error);
this.state.setError(error);
this.showToast('기간별 작업 현황 분석에 실패했습니다', 'error');
} finally {
@@ -358,7 +349,6 @@ class WorkAnalysisMainController {
// 실제 API 호출
const distributionData = await this.api.getProjectDistributionData(start, end);
console.log('🔍 프로젝트별 분포 API 응답:', distributionData);
// 데이터 처리
const recentWorkData = distributionData.recentWork?.success ? distributionData.recentWork.data.data : [];
@@ -366,7 +356,6 @@ class WorkAnalysisMainController {
const projectData = this.dataProcessor.aggregateProjectData(recentWorkData);
console.log('📊 취합된 프로젝트 데이터:', projectData);
// 테이블 렌더링
this.tableRenderer.renderProjectDistributionTable(projectData, workerData);
@@ -374,7 +363,7 @@ class WorkAnalysisMainController {
this.showToast('프로젝트별 분포 분석이 완료되었습니다', 'success');
} catch (error) {
console.error(' 프로젝트별 분포 분석 오류:', error);
console.error(' 프로젝트별 분포 분석 오류:', error);
this.state.setError(error);
this.showToast('프로젝트별 분포 분석에 실패했습니다', 'error');
} finally {
@@ -399,7 +388,6 @@ class WorkAnalysisMainController {
const workerStatsResponse = await this.api.getWorkerStats(start, end);
console.log('👤 작업자 통계 API 응답:', workerStatsResponse);
if (workerStatsResponse.success && workerStatsResponse.data) {
this.chartRenderer.renderWorkerPerformanceChart(workerStatsResponse.data);
@@ -409,7 +397,7 @@ class WorkAnalysisMainController {
}
} catch (error) {
console.error(' 작업자별 성과 분석 오류:', error);
console.error(' 작업자별 성과 분석 오류:', error);
this.state.setError(error);
this.showToast('작업자별 성과 분석에 실패했습니다', 'error');
} finally {
@@ -438,7 +426,6 @@ class WorkAnalysisMainController {
this.api.getErrorAnalysis(start, end)
]);
console.log('🔍 오류 분석 API 응답:', recentWorkResponse);
if (recentWorkResponse.success && recentWorkResponse.data) {
this.tableRenderer.renderErrorAnalysisTable(recentWorkResponse.data);
@@ -448,7 +435,7 @@ class WorkAnalysisMainController {
}
} catch (error) {
console.error(' 오류 분석 실패:', error);
console.error(' 오류 분석 실패:', error);
this.state.setError(error);
this.showToast('오류 분석에 실패했습니다', 'error');
} finally {
@@ -571,13 +558,11 @@ class WorkAnalysisMainController {
* 토스트 메시지 표시
*/
showToast(message, type = 'info') {
console.log(`📢 ${type.toUpperCase()}: ${message}`);
// 간단한 토스트 구현 (실제로는 더 정교한 토스트 라이브러리 사용 권장)
if (type === 'error') {
alert(`${message}`);
} else if (type === 'success') {
console.log(`${message}`);
} else if (type === 'warning') {
alert(`⚠️ ${message}`);
}
@@ -587,7 +572,7 @@ class WorkAnalysisMainController {
* 에러 처리
*/
handleError(errorInfo) {
console.error(' 에러 발생:', errorInfo);
console.error(' 에러 발생:', errorInfo);
this.showToast(errorInfo.message, 'error');
}
@@ -597,7 +582,6 @@ class WorkAnalysisMainController {
* 컨트롤러 상태 디버그
*/
debug() {
console.log('🔍 메인 컨트롤러 상태:');
console.log('- API 클라이언트:', this.api);
console.log('- 상태 관리자:', this.state.getState());
console.log('- 차트 상태:', this.chartRenderer.getChartStatus());