diff options
| author | joonhoekim <26rote@gmail.com> | 2025-07-31 13:24:21 +0000 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-07-31 13:24:21 +0000 |
| commit | f0213de0d2fb5fcb931b3ddaddcbb6581cab5d28 (patch) | |
| tree | 5bca8c2eb86e256eec0789d6a93c0d6e87da53eb | |
| parent | 494b8925db9aa442941b936ca1b9cfaefdb75f00 (diff) | |
(김준회) MDG 데이터 수신부 linter 오류 해결
| -rw-r--r-- | app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_MATERIAL_MASTER_PART_RETURN/route.ts | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_MATERIAL_MASTER_PART_RETURN/route.ts b/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_MATERIAL_MASTER_PART_RETURN/route.ts index e2c97b2e..7b1b85e8 100644 --- a/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_MATERIAL_MASTER_PART_RETURN/route.ts +++ b/app/api/(S-ERP)/(MDG)/IF_MDZ_EVCP_MATERIAL_MASTER_PART_RETURN/route.ts @@ -95,23 +95,30 @@ export async function POST(request: NextRequest) { } // XML 데이터를 DB 삽입 가능한 형태로 변환 +/** + * MATERIAL_MASTER_PART_RETURN 데이터 변환 함수 + * + * 데이터 처리 아키텍처: + * 1. 단일 테이블 (MATERIAL_MASTER_PART_RETURN_CMCTB_MAT_BSE) + * - MAT_CD가 unique 필드로 충돌 시 upsert 처리 + * + * XML 패턴: + * - MATERIAL_MASTER_PART_RETURN 인터페이스는 XML에 MAT_CD가 이미 포함된 패턴 + * + * @param materialData XML에서 파싱된 MATERIAL 데이터 + * @returns 처리된 MATERIAL 데이터 구조 + */ function transformMaterialData(materialData: CMCTBMatBseXML[]): ProcessedMaterialData[] { if (!materialData || !Array.isArray(materialData)) { return []; } return materialData.map(material => { - // 메인 Material 데이터 변환 + // 1단계: CMCTB_MAT_BSE (루트 - unique 필드: MAT_CD) const materialConverted = convertXMLToDBData<CMCTBMatBseData>( - material as Record<string, string | undefined>, - ['MAT_CD'] + material as Record<string, string | undefined> ); - // 필수 필드 보정 - if (!materialConverted.MAT_CD) { - materialConverted.MAT_CD = ''; - } - return { materialData: materialConverted }; @@ -119,21 +126,30 @@ function transformMaterialData(materialData: CMCTBMatBseXML[]): ProcessedMateria } // 데이터베이스 저장 함수 +/** + * 처리된 MATERIAL_MASTER_PART_RETURN 데이터를 데이터베이스에 저장 + * + * 저장 전략: + * 1. 단일 테이블: MAT_CD 기준 upsert (충돌 시 업데이트) + * - 송신 XML이 전체 데이터셋을 포함하므로 부분 업데이트 불필요 + * - 데이터 일관성과 단순성 확보 + * + * @param processedMaterials 변환된 MATERIAL 데이터 배열 + */ async function saveToDatabase(processedMaterials: ProcessedMaterialData[]) { console.log(`데이터베이스(배치) 저장 시작: ${processedMaterials.length}개 자재 데이터`); try { await db.transaction(async (tx) => { - // 1) 부모 테이블 데이터 준비 + // 1) 테이블 데이터 준비 const materialRows = processedMaterials .map((m) => m.materialData) .filter((m): m is CMCTBMatBseData => !!m.MAT_CD); - const matcds = materialRows.map((m) => m.MAT_CD as string); - - // 2) 하위 테이블 데이터 평탄화 (하위 테이블 없음) + // 하위테이블이 없으므로 FK 역할을 할 컬럼 정의 불필요 + // const matcds = materialRows.map((m) => m.MAT_CD as string); - // 3) 부모 테이블 UPSERT (배치) + // 2) 테이블 UPSERT (배치) await bulkUpsert(tx, MATERIAL_MASTER_PART_RETURN_CMCTB_MAT_BSE, materialRows, 'MAT_CD'); }); |
