diff --git a/backend-node/src/routes/dataRoutes.ts b/backend-node/src/routes/dataRoutes.ts index 0abc6793..02dfc1e8 100644 --- a/backend-node/src/routes/dataRoutes.ts +++ b/backend-node/src/routes/dataRoutes.ts @@ -742,6 +742,7 @@ router.post( inserted: result.data?.inserted || 0, updated: result.data?.updated || 0, deleted: result.data?.deleted || 0, + savedIds: result.data?.savedIds || [], }); } catch (error) { console.error("그룹화된 데이터 UPSERT 오류:", error); diff --git a/backend-node/src/services/dataService.ts b/backend-node/src/services/dataService.ts index 8c837697..2150a4af 100644 --- a/backend-node/src/services/dataService.ts +++ b/backend-node/src/services/dataService.ts @@ -1519,11 +1519,12 @@ class DataService { } } - console.log(`✅ UPSERT 완료:`, { inserted, updated, deleted }); + const savedIds = Array.from(processedIds); + console.log(`✅ UPSERT 완료:`, { inserted, updated, deleted, savedIds }); return { success: true, - data: { inserted, updated, deleted }, + data: { inserted, updated, deleted, savedIds }, }; } catch (error) { console.error(`UPSERT 오류 (${tableName}):`, error); diff --git a/frontend/lib/api/data.ts b/frontend/lib/api/data.ts index 270c59f9..14aad709 100644 --- a/frontend/lib/api/data.ts +++ b/frontend/lib/api/data.ts @@ -238,7 +238,7 @@ export const dataApi = { parentKeys: Record, records: Array>, options?: { deleteOrphans?: boolean } - ): Promise<{ success: boolean; inserted?: number; updated?: number; deleted?: number; message?: string; error?: string }> => { + ): Promise<{ success: boolean; inserted?: number; updated?: number; deleted?: number; savedIds?: string[]; message?: string; error?: string }> => { try { console.log("📡 [dataApi.upsertGroupedRecords] 요청 데이터:", { tableName, diff --git a/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputComponent.tsx b/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputComponent.tsx index e73a78c6..ffe2875d 100644 --- a/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputComponent.tsx +++ b/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputComponent.tsx @@ -689,6 +689,8 @@ export const SelectedItemsDetailInputComponent: React.FC !!r.id); + // 저장된 매핑 ID를 추적 (디테일 테이블에 mapping_id 주입용) + let savedMappingIds: string[] = []; try { const mappingResult = await dataApi.upsertGroupedRecords( mainTable, @@ -696,6 +698,11 @@ export const SelectedItemsDetailInputComponent: React.FC 0) { + const mappingId = savedMappingIds[0]; // 일반적으로 1:N (매핑 1개 : 단가 N개) + priceRecords.forEach((record) => { + if (!record.mapping_id) { + record.mapping_id = mappingId; + } + }); + console.log(`🔗 디테일 레코드에 mapping_id 주입: ${mappingId}`); + } + const priceHasDbIds = priceRecords.some((r) => !!r.id); try { const detailResult = await dataApi.upsertGroupedRecords(