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,7 +18,6 @@ class TbmAPI {
// 현재 로그인한 사용자 정보 가져오기
const userInfo = JSON.parse(localStorage.getItem('sso_user') || '{}');
this.state.currentUser = userInfo;
console.log('👤 로그인 사용자:', this.state.currentUser, 'user_id:', this.state.currentUser?.user_id);
// 병렬로 데이터 로드
await Promise.all([
@@ -31,9 +30,8 @@ class TbmAPI {
this.loadWorkplaceCategories()
]);
console.log('✅ 초기 데이터 로드 완료');
} catch (error) {
console.error(' 초기 데이터 로드 오류:', error);
console.error(' 초기 데이터 로드 오류:', error);
window.showToast?.('데이터를 불러오는 중 오류가 발생했습니다.', 'error');
}
}
@@ -49,11 +47,10 @@ class TbmAPI {
// 활성 상태인 작업자만 필터링
workers = workers.filter(w => w.status === 'active' && w.employment_status === 'employed');
this.state.allWorkers = workers;
console.log('✅ 작업자 목록 로드:', workers.length + '명');
return workers;
}
} catch (error) {
console.error(' 작업자 로딩 오류:', error);
console.error(' 작업자 로딩 오류:', error);
throw error;
}
}
@@ -69,11 +66,10 @@ class TbmAPI {
this.state.allProjects = projects.filter(p =>
p.is_active === 1 || p.is_active === true || p.is_active === '1'
);
console.log('✅ 프로젝트 목록 로드:', this.state.allProjects.length + '개 (활성)');
return this.state.allProjects;
}
} catch (error) {
console.error(' 프로젝트 로딩 오류:', error);
console.error(' 프로젝트 로딩 오류:', error);
throw error;
}
}
@@ -86,11 +82,10 @@ class TbmAPI {
const response = await window.apiCall('/tbm/safety-checks');
if (response && response.success) {
this.state.allSafetyChecks = response.data;
console.log('✅ 안전 체크리스트 로드:', this.state.allSafetyChecks.length + '개');
return this.state.allSafetyChecks;
}
} catch (error) {
console.error(' 안전 체크리스트 로딩 오류:', error);
console.error(' 안전 체크리스트 로딩 오류:', error);
}
}
@@ -102,11 +97,10 @@ class TbmAPI {
const response = await window.apiCall('/daily-work-reports/work-types');
if (response && response.success) {
this.state.allWorkTypes = response.data || [];
console.log('✅ 공정 목록 로드:', this.state.allWorkTypes.length + '개');
return this.state.allWorkTypes;
}
} catch (error) {
console.error(' 공정 로딩 오류:', error);
console.error(' 공정 로딩 오류:', error);
}
}
@@ -118,11 +112,10 @@ class TbmAPI {
const response = await window.apiCall('/tasks/active/list');
if (response && response.success) {
this.state.allTasks = response.data || [];
console.log('✅ 작업 목록 로드:', this.state.allTasks.length + '개');
return this.state.allTasks;
}
} catch (error) {
console.error(' 작업 로딩 오류:', error);
console.error(' 작업 로딩 오류:', error);
}
}
@@ -134,11 +127,10 @@ class TbmAPI {
const response = await window.apiCall('/workplaces?is_active=true');
if (response && response.success) {
this.state.allWorkplaces = response.data || [];
console.log('✅ 작업장 목록 로드:', this.state.allWorkplaces.length + '개');
return this.state.allWorkplaces;
}
} catch (error) {
console.error(' 작업장 로딩 오류:', error);
console.error(' 작업장 로딩 오류:', error);
}
}
@@ -150,11 +142,10 @@ class TbmAPI {
const response = await window.apiCall('/workplaces/categories/active/list');
if (response && response.success) {
this.state.allWorkplaceCategories = response.data || [];
console.log('✅ 작업장 카테고리 로드:', this.state.allWorkplaceCategories.length + '개');
return this.state.allWorkplaceCategories;
}
} catch (error) {
console.error(' 작업장 카테고리 로딩 오류:', error);
console.error(' 작업장 카테고리 로딩 오류:', error);
}
}
@@ -172,10 +163,9 @@ class TbmAPI {
} else {
this.state.todaySessions = [];
}
console.log('✅ 오늘 TBM 로드:', this.state.todaySessions.length + '건');
return this.state.todaySessions;
} catch (error) {
console.error(' 오늘 TBM 조회 오류:', error);
console.error(' 오늘 TBM 조회 오류:', error);
window.showToast?.('오늘 TBM을 불러오는 중 오류가 발생했습니다.', 'error');
this.state.todaySessions = [];
return [];
@@ -217,11 +207,10 @@ class TbmAPI {
}
});
console.log('✅ 날짜별 TBM 로드 완료:', this.state.allLoadedSessions.length + '건');
return this.state.dateGroupedSessions;
} catch (error) {
console.error(' TBM 날짜별 로드 오류:', error);
console.error(' TBM 날짜별 로드 오류:', error);
window.showToast?.('TBM을 불러오는 중 오류가 발생했습니다.', 'error');
this.state.dateGroupedSessions = {};
return {};
@@ -242,7 +231,7 @@ class TbmAPI {
}
return this.state.allSessions;
} catch (error) {
console.error(' TBM 세션 조회 오류:', error);
console.error(' TBM 세션 조회 오류:', error);
window.showToast?.('TBM 세션을 불러오는 중 오류가 발생했습니다.', 'error');
this.state.allSessions = [];
return [];
@@ -258,10 +247,9 @@ class TbmAPI {
if (!response || !response.success) {
throw new Error(response?.message || '세션 생성 실패');
}
console.log('✅ TBM 세션 생성 완료:', response.data?.session_id);
return response;
} catch (error) {
console.error(' TBM 세션 생성 오류:', error);
console.error(' TBM 세션 생성 오류:', error);
throw error;
}
}
@@ -277,7 +265,7 @@ class TbmAPI {
}
return response.data;
} catch (error) {
console.error(' TBM 세션 조회 오류:', error);
console.error(' TBM 세션 조회 오류:', error);
throw error;
}
}
@@ -293,7 +281,7 @@ class TbmAPI {
}
return response.data || [];
} catch (error) {
console.error(' TBM 팀원 조회 오류:', error);
console.error(' TBM 팀원 조회 오류:', error);
throw error;
}
}
@@ -313,10 +301,9 @@ class TbmAPI {
if (response && response.duplicates) err.duplicates = response.duplicates;
throw err;
}
console.log('✅ TBM 팀원 추가 완료:', members.length + '명');
return response;
} catch (error) {
console.error(' TBM 팀원 추가 오류:', error);
console.error(' TBM 팀원 추가 오류:', error);
throw error;
}
}
@@ -329,7 +316,7 @@ class TbmAPI {
const response = await window.apiCall(`/tbm/sessions/${sessionId}/team/clear`, 'DELETE');
return response;
} catch (error) {
console.error(' TBM 팀원 삭제 오류:', error);
console.error(' TBM 팀원 삭제 오류:', error);
throw error;
}
}
@@ -342,7 +329,7 @@ class TbmAPI {
const response = await window.apiCall(`/tbm/sessions/${sessionId}/safety`);
return response?.data || [];
} catch (error) {
console.error(' 안전 체크 조회 오류:', error);
console.error(' 안전 체크 조회 오류:', error);
return [];
}
}
@@ -358,7 +345,7 @@ class TbmAPI {
}
return response.data;
} catch (error) {
console.error(' 필터링된 안전 체크 조회 오류:', error);
console.error(' 필터링된 안전 체크 조회 오류:', error);
throw error;
}
}
@@ -378,7 +365,7 @@ class TbmAPI {
}
return response;
} catch (error) {
console.error(' 안전 체크 저장 오류:', error);
console.error(' 안전 체크 저장 오류:', error);
throw error;
}
}
@@ -396,10 +383,9 @@ class TbmAPI {
if (!response || !response.success) {
throw new Error(response?.message || '완료 처리 실패');
}
console.log('✅ TBM 완료 처리:', sessionId);
return response;
} catch (error) {
console.error(' TBM 완료 처리 오류:', error);
console.error(' TBM 완료 처리 오류:', error);
throw error;
}
}
@@ -415,7 +401,7 @@ class TbmAPI {
}
return response;
} catch (error) {
console.error(' 작업 인계 저장 오류:', error);
console.error(' 작업 인계 저장 오류:', error);
throw error;
}
}
@@ -431,7 +417,7 @@ class TbmAPI {
}
return response.data;
} catch (error) {
console.error(' 작업장 로드 오류:', error);
console.error(' 작업장 로드 오류:', error);
return [];
}
}
@@ -448,7 +434,7 @@ class TbmAPI {
}
return [];
} catch (error) {
console.error(' 지도 영역 로드 오류:', error);
console.error(' 지도 영역 로드 오류:', error);
return [];
}
}
@@ -462,10 +448,9 @@ class TbmAPI {
if (!response || !response.success) {
throw new Error(response?.message || '삭제 실패');
}
console.log('✅ TBM 세션 삭제:', sessionId);
return response;
} catch (error) {
console.error(' TBM 세션 삭제 오류:', error);
console.error(' TBM 세션 삭제 오류:', error);
throw error;
}
}
@@ -485,7 +470,7 @@ class TbmAPI {
}
return response;
} catch (error) {
console.error(' 분할 배정 오류:', error);
console.error(' 분할 배정 오류:', error);
throw error;
}
}
@@ -505,7 +490,7 @@ class TbmAPI {
}
return response;
} catch (error) {
console.error(' 팀원 수정 오류:', error);
console.error(' 팀원 수정 오류:', error);
throw error;
}
}
@@ -521,7 +506,7 @@ class TbmAPI {
}
return response;
} catch (error) {
console.error(' TBM 이동 오류:', error);
console.error(' TBM 이동 오류:', error);
throw error;
}
}
@@ -537,7 +522,7 @@ class TbmAPI {
}
return response;
} catch (error) {
console.error(' 작업 생성 오류:', error);
console.error(' 작업 생성 오류:', error);
throw error;
}
}
@@ -553,7 +538,7 @@ class TbmAPI {
}
return [];
} catch (error) {
console.error(' 활성 작업장 목록 오류:', error);
console.error(' 활성 작업장 목록 오류:', error);
return [];
}
}
@@ -569,7 +554,7 @@ class TbmAPI {
}
return [];
} catch (error) {
console.error(' 배정 현황 조회 오류:', error);
console.error(' 배정 현황 조회 오류:', error);
return [];
}
}
@@ -585,7 +570,7 @@ class TbmAPI {
}
return [];
} catch (error) {
console.error(' TBM 세션 조회 오류:', error);
console.error(' TBM 세션 조회 오류:', error);
return [];
}
}
@@ -603,10 +588,9 @@ class TbmAPI {
if (!response || !response.success) {
throw new Error(response?.message || '완료 처리 실패');
}
console.log('✅ TBM 완료 처리 (근태 포함):', sessionId);
return response;
} catch (error) {
console.error(' TBM 완료 처리 오류:', error);
console.error(' TBM 완료 처리 오류:', error);
throw error;
}
}