From f7b9a5db1cd53b066c9245e376bd0e25ace77650 Mon Sep 17 00:00:00 2001 From: dohyeons Date: Wed, 8 Oct 2025 10:34:16 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=ED=83=80=EC=9E=85=20=EB=8B=A8=EC=96=B8=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend-node/src/database/OracleConnector.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend-node/src/database/OracleConnector.ts b/backend-node/src/database/OracleConnector.ts index a4e97333..82f0bf05 100644 --- a/backend-node/src/database/OracleConnector.ts +++ b/backend-node/src/database/OracleConnector.ts @@ -111,10 +111,10 @@ export class OracleConnector implements DatabaseConnector { // ๐Ÿ”ฅ COMMIT/ROLLBACK ๋ช…๋ น์€ ์ง์ ‘ ์‹คํ–‰ if (isCOMMIT || isROLLBACK) { if (isCOMMIT) { - await this.connection!.commit(); + await (this.connection as any).commit(); console.log("โœ… Oracle COMMIT ์‹คํ–‰๋จ"); } else { - await this.connection!.rollback(); + await (this.connection as any).rollback(); console.log("โš ๏ธ Oracle ROLLBACK ์‹คํ–‰๋จ"); } return { From 25c54fae68627dbe9c3e395ce07312149a922bf1 Mon Sep 17 00:00:00 2001 From: dohyeons Date: Wed, 8 Oct 2025 10:39:17 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20DataConnectionDesigner=20=EC=86=90?= =?UTF-8?q?=EC=83=81=EB=90=9C=20=ED=8C=8C=EC=9D=BC=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redesigned/DataConnectionDesigner.tsx | 116 +++++++++++++----- 1 file changed, 83 insertions(+), 33 deletions(-) diff --git a/frontend/components/dataflow/connection/redesigned/DataConnectionDesigner.tsx b/frontend/components/dataflow/connection/redesigned/DataConnectionDesigner.tsx index 604b29f1..8c5514c3 100644 --- a/frontend/components/dataflow/connection/redesigned/DataConnectionDesigner.tsx +++ b/frontend/components/dataflow/connection/redesigned/DataConnectionDesigner.tsx @@ -1,17 +1,46 @@ "use client"; -import React, { useState } from "react"; -import { ConnectionTypeSelector } from "./LeftPanel/ConnectionTypeSelector"; -import { MappingInfoPanel } from "./LeftPanel/MappingInfoPanel"; -import { StepProgress } from "./RightPanel/StepProgress"; -import { ConnectionStep } from "./RightPanel/ConnectionStep"; -import { TableStep } from "./RightPanel/TableStep"; -import { FieldMappingStep } from "./RightPanel/FieldMappingStep"; -import { DataConnectionState } from "./types/redesigned"; -import { ResponsiveContainer, ResponsiveGrid } from "@/components/layout/ResponsiveContainer"; -import { useResponsive } from "@/lib/hooks/useResponsive"; +import React, { useState, useCallback, useEffect } from "react"; +import { Card } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { toast } from "sonner"; +import { X, ArrowLeft } from "lucide-react"; -const initialState: DataConnectionState = { +// API import +import { saveDataflowRelationship, checkRelationshipNameDuplicate } from "@/lib/api/dataflowSave"; +import { getColumnsFromConnection } from "@/lib/api/multiConnection"; + +// ํƒ€์ž… import +import { + DataConnectionState, + DataConnectionActions, + DataConnectionDesignerProps, + FieldMapping, + ValidationResult, + TestResult, + MappingStats, + ActionGroup, + SingleAction, +} from "./types/redesigned"; +import { ColumnInfo, Connection, TableInfo } from "@/lib/types/multiConnection"; + +// ์ปดํฌ๋„ŒํŠธ import +import LeftPanel from "./LeftPanel/LeftPanel"; +import RightPanel from "./RightPanel/RightPanel"; + +/** + * ๐ŸŽจ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ์„ค์ • ๋ฉ”์ธ ๋””์ž์ด๋„ˆ + * - ์ขŒ์šฐ ๋ถ„ํ•  ๋ ˆ์ด์•„์›ƒ (30% + 70%) + * - ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์•ก์…˜ ์ฒ˜๋ฆฌ + * - ๊ธฐ์กด ๋ชจ๋‹ฌ ๊ธฐ๋Šฅ์„ ๋ฉ”์ธ ํ™”๋ฉด์œผ๋กœ ํ†ตํ•ฉ + */ +const DataConnectionDesigner: React.FC = ({ + onClose, + initialData, + showBackButton = false, +}) => { + // ๐Ÿ”„ ์ƒํƒœ ๊ด€๋ฆฌ + const [state, setState] = useState(() => ({ connectionType: "data_save", currentStep: 1, fieldMappings: [], @@ -23,6 +52,34 @@ const initialState: DataConnectionState = { estimatedRows: 0, actionType: "INSERT", }, + // ์ œ์–ด ์‹คํ–‰ ์กฐ๊ฑด ์ดˆ๊ธฐ๊ฐ’ + controlConditions: [], + + // ์•ก์…˜ ๊ทธ๋ฃน ์ดˆ๊ธฐ๊ฐ’ (๋ฉ€ํ‹ฐ ์•ก์…˜) + actionGroups: [ + { + id: "group_1", + name: "๊ธฐ๋ณธ ์•ก์…˜ ๊ทธ๋ฃน", + logicalOperator: "AND" as const, + actions: [ + { + id: "action_1", + name: "์•ก์…˜ 1", + actionType: "insert" as const, + conditions: [], + fieldMappings: [], + isEnabled: true, + }, + ], + isEnabled: true, + }, + ], + groupsLogicalOperator: "AND" as "AND" | "OR", + + // ๊ธฐ์กด ํ˜ธํ™˜์„ฑ ํ•„๋“œ๋“ค (deprecated) + actionType: "insert", + actionConditions: [], + actionFieldMappings: [], isLoading: false, validationErrors: [], @@ -720,30 +777,23 @@ const initialState: DataConnectionState = { }; return ( -
-
-

- ๐ŸŽจ ์ œ์–ด๊ด€๋ฆฌ - ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ์„ค์ • -

-

- ์‹œ๊ฐ์  ํ•„๋“œ ๋งคํ•‘์œผ๋กœ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•˜์„ธ์š” +

+ {/* ์ƒ๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ */} + {showBackButton && ( +
+
+
+ +
+

๐Ÿ”— ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ์„ค์ •

+

+ {state.connectionType === "data_save" ? "๋ฐ์ดํ„ฐ ์ €์žฅ" : "์™ธ๋ถ€ ํ˜ธ์ถœ"} ์—ฐ๊ฒฐ ์„ค์ •

- -
-
- setState(prev => ({ ...prev, connectionType: type }))} - /> - -
- setState(prev => ({ ...prev, selectedMapping: mappingId }))} - /> +
)} From 559c3fc98f7ac55e9bb3df8ceb02af2b40b4bc72 Mon Sep 17 00:00:00 2001 From: dohyeons Date: Wed, 8 Oct 2025 10:42:23 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20DataConnectionDesigner=20=EC=86=90?= =?UTF-8?q?=EC=83=81=EB=90=9C=20=ED=8C=8C=EC=9D=BC=EB=A1=9C=20=EC=9B=90?= =?UTF-8?q?=EC=83=81=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redesigned/DataConnectionDesigner.tsx | 116 +++++------------- 1 file changed, 33 insertions(+), 83 deletions(-) diff --git a/frontend/components/dataflow/connection/redesigned/DataConnectionDesigner.tsx b/frontend/components/dataflow/connection/redesigned/DataConnectionDesigner.tsx index 8c5514c3..604b29f1 100644 --- a/frontend/components/dataflow/connection/redesigned/DataConnectionDesigner.tsx +++ b/frontend/components/dataflow/connection/redesigned/DataConnectionDesigner.tsx @@ -1,46 +1,17 @@ "use client"; -import React, { useState, useCallback, useEffect } from "react"; -import { Card } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { toast } from "sonner"; -import { X, ArrowLeft } from "lucide-react"; +import React, { useState } from "react"; +import { ConnectionTypeSelector } from "./LeftPanel/ConnectionTypeSelector"; +import { MappingInfoPanel } from "./LeftPanel/MappingInfoPanel"; +import { StepProgress } from "./RightPanel/StepProgress"; +import { ConnectionStep } from "./RightPanel/ConnectionStep"; +import { TableStep } from "./RightPanel/TableStep"; +import { FieldMappingStep } from "./RightPanel/FieldMappingStep"; +import { DataConnectionState } from "./types/redesigned"; +import { ResponsiveContainer, ResponsiveGrid } from "@/components/layout/ResponsiveContainer"; +import { useResponsive } from "@/lib/hooks/useResponsive"; -// API import -import { saveDataflowRelationship, checkRelationshipNameDuplicate } from "@/lib/api/dataflowSave"; -import { getColumnsFromConnection } from "@/lib/api/multiConnection"; - -// ํƒ€์ž… import -import { - DataConnectionState, - DataConnectionActions, - DataConnectionDesignerProps, - FieldMapping, - ValidationResult, - TestResult, - MappingStats, - ActionGroup, - SingleAction, -} from "./types/redesigned"; -import { ColumnInfo, Connection, TableInfo } from "@/lib/types/multiConnection"; - -// ์ปดํฌ๋„ŒํŠธ import -import LeftPanel from "./LeftPanel/LeftPanel"; -import RightPanel from "./RightPanel/RightPanel"; - -/** - * ๐ŸŽจ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ์„ค์ • ๋ฉ”์ธ ๋””์ž์ด๋„ˆ - * - ์ขŒ์šฐ ๋ถ„ํ•  ๋ ˆ์ด์•„์›ƒ (30% + 70%) - * - ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์•ก์…˜ ์ฒ˜๋ฆฌ - * - ๊ธฐ์กด ๋ชจ๋‹ฌ ๊ธฐ๋Šฅ์„ ๋ฉ”์ธ ํ™”๋ฉด์œผ๋กœ ํ†ตํ•ฉ - */ -const DataConnectionDesigner: React.FC = ({ - onClose, - initialData, - showBackButton = false, -}) => { - // ๐Ÿ”„ ์ƒํƒœ ๊ด€๋ฆฌ - const [state, setState] = useState(() => ({ +const initialState: DataConnectionState = { connectionType: "data_save", currentStep: 1, fieldMappings: [], @@ -52,34 +23,6 @@ const DataConnectionDesigner: React.FC = ({ estimatedRows: 0, actionType: "INSERT", }, - // ์ œ์–ด ์‹คํ–‰ ์กฐ๊ฑด ์ดˆ๊ธฐ๊ฐ’ - controlConditions: [], - - // ์•ก์…˜ ๊ทธ๋ฃน ์ดˆ๊ธฐ๊ฐ’ (๋ฉ€ํ‹ฐ ์•ก์…˜) - actionGroups: [ - { - id: "group_1", - name: "๊ธฐ๋ณธ ์•ก์…˜ ๊ทธ๋ฃน", - logicalOperator: "AND" as const, - actions: [ - { - id: "action_1", - name: "์•ก์…˜ 1", - actionType: "insert" as const, - conditions: [], - fieldMappings: [], - isEnabled: true, - }, - ], - isEnabled: true, - }, - ], - groupsLogicalOperator: "AND" as "AND" | "OR", - - // ๊ธฐ์กด ํ˜ธํ™˜์„ฑ ํ•„๋“œ๋“ค (deprecated) - actionType: "insert", - actionConditions: [], - actionFieldMappings: [], isLoading: false, validationErrors: [], @@ -777,23 +720,30 @@ const DataConnectionDesigner: React.FC = ({ }; return ( -
- {/* ์ƒ๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ */} - {showBackButton && ( -
-
-
- -
-

๐Ÿ”— ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ์„ค์ •

-

- {state.connectionType === "data_save" ? "๋ฐ์ดํ„ฐ ์ €์žฅ" : "์™ธ๋ถ€ ํ˜ธ์ถœ"} ์—ฐ๊ฒฐ ์„ค์ • +

+
+

+ ๐ŸŽจ ์ œ์–ด๊ด€๋ฆฌ - ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ์„ค์ • +

+

+ ์‹œ๊ฐ์  ํ•„๋“œ ๋งคํ•‘์œผ๋กœ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•˜์„ธ์š”

-
+ +
+
+ setState(prev => ({ ...prev, connectionType: type }))} + /> + +
+ setState(prev => ({ ...prev, selectedMapping: mappingId }))} + />
)}