summaryrefslogtreecommitdiff
path: root/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_PROJECT_MASTER/route.ts
diff options
context:
space:
mode:
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.ts36
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);