diff options
Diffstat (limited to 'app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_PROJECT_MASTER/route.ts')
| -rw-r--r-- | app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_PROJECT_MASTER/route.ts | 36 |
1 files changed, 12 insertions, 24 deletions
diff --git a/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_PROJECT_MASTER/route.ts b/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_PROJECT_MASTER/route.ts index 93071c69..c1563859 100644 --- a/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_PROJECT_MASTER/route.ts +++ b/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_PROJECT_MASTER/route.ts @@ -13,7 +13,9 @@ import { createErrorResponse, createSuccessResponse, withSoapLogging -} from "@/lib/soap/mdg/utils"; +} from "@/lib/soap/utils"; +import { bulkUpsert } from "@/lib/soap/batch-utils"; // 서브테이블 없음 + // 스키마에서 직접 타입 추론 type ProjectData = typeof PROJECT_MASTER_CMCTB_PROJ_MAST.$inferInsert; @@ -102,8 +104,7 @@ function transformProjectData(projectData: ProjectXML[]): ProcessedProjectData[] return projectData.map(proj => { // Project 데이터 변환 const project = convertXMLToDBData<ProjectData>( - proj as Record<string, string | undefined>, - ['PROJ_NO'] + proj as Record<string, string | undefined> ); // 필수 필드 보정 @@ -119,32 +120,19 @@ function transformProjectData(projectData: ProjectXML[]): ProcessedProjectData[] // 데이터베이스 저장 함수 async function saveToDatabase(processedProjects: ProcessedProjectData[]) { - console.log(`데이터베이스 저장 함수가 호출됨. ${processedProjects.length}개의 프로젝트 데이터 수신.`); - + console.log(`데이터베이스(배치) 저장 시작: ${processedProjects.length}개 프로젝트`); try { await db.transaction(async (tx) => { - for (const projectData of processedProjects) { - const { project } = projectData; - - if (!project.PROJ_NO) { - console.warn('프로젝트번호(PROJ_NO)가 없는 항목 발견, 건너뜁니다.'); - continue; - } + const projectRows = processedProjects + .map((p) => p.project) + .filter((p): p is ProjectData => !!p.PROJ_NO); - // Project 테이블 Upsert - await tx.insert(PROJECT_MASTER_CMCTB_PROJ_MAST) - .values(project) - .onConflictDoUpdate({ - target: PROJECT_MASTER_CMCTB_PROJ_MAST.PROJ_NO, - set: { - ...project, - updatedAt: new Date(), - } - }); - } + if (!projectRows.length) return; + + await bulkUpsert(tx, PROJECT_MASTER_CMCTB_PROJ_MAST, projectRows, 'PROJ_NO'); }); - console.log(`${processedProjects.length}개의 프로젝트 데이터 처리 완료.`); + console.log(`데이터베이스(배치) 저장 완료: ${processedProjects.length}개 프로젝트`); return true; } catch (error) { console.error('데이터베이스 저장 중 오류 발생:', error); |
