"use server" import { oracleKnex } from '@/lib/oracle-db/db' // WBS 코드 타입 정의 export interface WbsCode { WBS_ELMT: string // WBS 요소 WBS_ELMT_NM: string // WBS 요소명 } // 테스트 환경용 폴백 데이터 const FALLBACK_TEST_DATA: WbsCode[] = [ { WBS_ELMT: 'WBS001', WBS_ELMT_NM: 'WBS 항목 1' }, { WBS_ELMT: 'WBS002', WBS_ELMT_NM: 'WBS 항목 2' }, { WBS_ELMT: 'WBS003', WBS_ELMT_NM: 'WBS 항목 3' }, { WBS_ELMT: 'WBS004', WBS_ELMT_NM: 'WBS 항목 4' }, { WBS_ELMT: 'WBS005', WBS_ELMT_NM: 'WBS 항목 5' }, ] /** * WBS 코드 목록 조회 (Oracle에서 전체 조회, 실패 시 폴백 데이터 사용) * CMCTB_PROJ_WBS 테이블에서 조회 */ export async function getWbsCodes(): Promise<{ success: boolean data: WbsCode[] error?: string isUsingFallback?: boolean }> { try { console.log('📋 [getWbsCodes] Oracle 쿼리 시작...') const result = await oracleKnex.raw(` SELECT WBS_ELMT,WBS_ELMT_NM FROM CMCTB_PROJ_WBS WHERE ROWNUM < 30 AND PROJ_NO = 'SN2673' `) // Oracle raw query의 결과는 rows 배열에 들어있음 const rows = (result.rows || result) as Array> console.log(`✅ [getWbsCodes] Oracle 쿼리 성공 - ${rows.length}건 조회`) // null 값 필터링 const cleanedResult = rows .filter((item) => item.WBS_ELMT && item.WBS_ELMT_NM ) .map((item) => ({ WBS_ELMT: String(item.WBS_ELMT), WBS_ELMT_NM: String(item.WBS_ELMT_NM) })) console.log(`✅ [getWbsCodes] 필터링 후 ${cleanedResult.length}건`) return { success: true, data: cleanedResult, isUsingFallback: false } } catch (error) { console.error('❌ [getWbsCodes] Oracle 오류:', error) console.log('🔄 [getWbsCodes] 폴백 테스트 데이터 사용 (' + FALLBACK_TEST_DATA.length + '건)') return { success: true, data: FALLBACK_TEST_DATA, isUsingFallback: true } } }