From 351d53cd0c183a3081d8fcb82a92e1505720b356 Mon Sep 17 00:00:00 2001 From: kjs Date: Mon, 26 Jan 2026 14:55:36 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=B1=84=EB=B2=88=20=EA=B7=9C=EC=B9=99?= =?UTF-8?q?=20=EC=A0=80=EC=9E=A5=20API=20=EB=B0=8F=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EA=B4=80=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 채번 규칙 저장 API에서 ruleName을 필수로 설정하고, tableName과 columnName은 선택적으로 변경하였습니다. - 테이블 관리 페이지에서 자동 저장 기능을 제거하고, 전체 저장 버튼으로 저장하도록 수정하였습니다. - 카테고리 컬럼 선택 시, 선택된 컬럼의 테이블 이름과 컬럼 이름을 함께 전달하도록 개선하였습니다. --- .../src/controllers/numberingRuleController.ts | 11 +++++++---- .../(main)/admin/systemMng/tableMngList/page.tsx | 14 +++++--------- .../table-category/CategoryColumnList.tsx | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/backend-node/src/controllers/numberingRuleController.ts b/backend-node/src/controllers/numberingRuleController.ts index 333325a8..9a53a1cb 100644 --- a/backend-node/src/controllers/numberingRuleController.ts +++ b/backend-node/src/controllers/numberingRuleController.ts @@ -284,6 +284,7 @@ router.get("/test/by-column/:tableName/:columnName", authenticateToken, async (r }); // [테스트] 테스트 테이블에 채번 규칙 저장 +// 채번 규칙은 독립적으로 생성 가능 (나중에 테이블 타입 관리에서 컬럼에 연결) router.post("/test/save", authenticateToken, async (req: AuthenticatedRequest, res: Response) => { const companyCode = req.user!.companyCode; const userId = req.user!.userId; @@ -291,15 +292,17 @@ router.post("/test/save", authenticateToken, async (req: AuthenticatedRequest, r logger.info("[테스트] 채번 규칙 저장 요청", { ruleId: ruleConfig.ruleId, - tableName: ruleConfig.tableName, - columnName: ruleConfig.columnName, + ruleName: ruleConfig.ruleName, + tableName: ruleConfig.tableName || "(미지정)", + columnName: ruleConfig.columnName || "(미지정)", }); try { - if (!ruleConfig.tableName || !ruleConfig.columnName) { + // ruleName만 필수, tableName/columnName은 선택 (나중에 테이블 타입 관리에서 연결) + if (!ruleConfig.ruleName) { return res.status(400).json({ success: false, - error: "tableName and columnName are required" + error: "ruleName is required" }); } diff --git a/frontend/app/(main)/admin/systemMng/tableMngList/page.tsx b/frontend/app/(main)/admin/systemMng/tableMngList/page.tsx index e10bb7f6..73e5d282 100644 --- a/frontend/app/(main)/admin/systemMng/tableMngList/page.tsx +++ b/frontend/app/(main)/admin/systemMng/tableMngList/page.tsx @@ -1810,7 +1810,7 @@ export default function TableManagementPage() { { + onSelect={() => { const columnIndex = columns.findIndex( (c) => c.columnName === column.columnName, ); @@ -1819,9 +1819,7 @@ export default function TableManagementPage() { ...prev, [column.columnName]: false, })); - // 🆕 자동 저장 (선택 해제) - const updatedColumn = { ...column, numberingRuleId: undefined }; - await handleSaveColumn(updatedColumn); + // 자동 저장 제거 - 전체 저장 버튼으로 저장 }} className="text-xs" > @@ -1837,19 +1835,17 @@ export default function TableManagementPage() { { + onSelect={() => { const columnIndex = columns.findIndex( (c) => c.columnName === column.columnName, ); - // 상태 업데이트 + // 상태 업데이트만 (자동 저장 제거) handleColumnChange(columnIndex, "numberingRuleId", rule.ruleId); setNumberingComboboxOpen((prev) => ({ ...prev, [column.columnName]: false, })); - // 🆕 자동 저장 - const updatedColumn = { ...column, numberingRuleId: rule.ruleId }; - await handleSaveColumn(updatedColumn); + // 전체 저장 버튼으로 저장 }} className="text-xs" > diff --git a/frontend/components/table-category/CategoryColumnList.tsx b/frontend/components/table-category/CategoryColumnList.tsx index bfdd0f9a..ac4fa960 100644 --- a/frontend/components/table-category/CategoryColumnList.tsx +++ b/frontend/components/table-category/CategoryColumnList.tsx @@ -196,7 +196,7 @@ export function CategoryColumnList({ tableName, selectedColumn, onColumnSelect, // 첫 번째 컬럼 자동 선택 if (columnsWithCount.length > 0 && !selectedColumn) { const firstCol = columnsWithCount[0]; - onColumnSelect(firstCol.columnName, firstCol.columnLabel, firstCol.tableName); + onColumnSelect(`${firstCol.tableName}.${firstCol.columnName}`, firstCol.columnLabel, firstCol.tableName); } } catch (error) { console.error("❌ 카테고리 컬럼 조회 실패:", error);