diff --git a/.gitignore b/.gitignore index 197ad216..fb843160 100644 --- a/.gitignore +++ b/.gitignore @@ -191,3 +191,6 @@ mcp-task-queue/ .cursor/rules/multi-agent-tester.mdc .cursor/rules/multi-agent-reviewer.mdc .cursor/rules/multi-agent-knowledge.mdc + +# 파이프라인 회고록 (자동 생성) +docs/retrospectives/ diff --git a/frontend/components/common/ExcelUploadModal.tsx b/frontend/components/common/ExcelUploadModal.tsx index d3a4b187..601d44fc 100644 --- a/frontend/components/common/ExcelUploadModal.tsx +++ b/frontend/components/common/ExcelUploadModal.tsx @@ -97,10 +97,23 @@ export interface ExcelUploadModalProps { interface ColumnMapping { excelColumn: string; systemColumn: string | null; - // 중복 체크 설정 (해당 컬럼을 중복 체크 키로 사용할지) checkDuplicate?: boolean; } +function flattenCategoryValues( + values: Array<{ valueCode: string; valueLabel: string; children?: any[] }> +): Array<{ valueCode: string; valueLabel: string }> { + const result: Array<{ valueCode: string; valueLabel: string }> = []; + const traverse = (items: any[]) => { + for (const item of items) { + result.push({ valueCode: item.valueCode, valueLabel: item.valueLabel }); + if (item.children?.length > 0) traverse(item.children); + } + }; + traverse(values); + return result; +} + export const ExcelUploadModal: React.FC = ({ open, onOpenChange, @@ -681,12 +694,8 @@ export const ExcelUploadModal: React.FC = ({ const valuesResponse = await getCategoryValues(targetTableName, catCol.systemCol); if (!valuesResponse.success || !valuesResponse.data) continue; - const validValues = valuesResponse.data as Array<{ - valueCode: string; - valueLabel: string; - }>; + const validValues = flattenCategoryValues(valuesResponse.data as any[]); - // 유효한 코드와 라벨 Set 생성 const validCodes = new Set(validValues.map((v) => v.valueCode)); const validLabels = new Set(validValues.map((v) => v.valueLabel)); const validLabelsLower = new Set(validValues.map((v) => v.valueLabel.toLowerCase())); diff --git a/frontend/components/common/MultiTableExcelUploadModal.tsx b/frontend/components/common/MultiTableExcelUploadModal.tsx index f6d11ae9..9541a13d 100644 --- a/frontend/components/common/MultiTableExcelUploadModal.tsx +++ b/frontend/components/common/MultiTableExcelUploadModal.tsx @@ -51,6 +51,20 @@ interface ColumnMapping { targetColumn: string | null; } +function flattenCategoryValues( + values: Array<{ valueCode: string; valueLabel: string; children?: any[] }> +): Array<{ valueCode: string; valueLabel: string }> { + const result: Array<{ valueCode: string; valueLabel: string }> = []; + const traverse = (items: any[]) => { + for (const item of items) { + result.push({ valueCode: item.valueCode, valueLabel: item.valueLabel }); + if (item.children?.length > 0) traverse(item.children); + } + }; + traverse(values); + return result; +} + export const MultiTableExcelUploadModal: React.FC = ({ open, onOpenChange, @@ -356,10 +370,7 @@ export const MultiTableExcelUploadModal: React.FC; + const validValues = flattenCategoryValues(valuesResponse.data as any[]); const validCodes = new Set(validValues.map((v) => v.valueCode)); const validLabels = new Set(validValues.map((v) => v.valueLabel));