feat: 채번 규칙 저장 API 및 테이블 관리 기능 개선

- 채번 규칙 저장 API에서 ruleName을 필수로 설정하고, tableName과 columnName은 선택적으로 변경하였습니다.
- 테이블 관리 페이지에서 자동 저장 기능을 제거하고, 전체 저장 버튼으로 저장하도록 수정하였습니다.
- 카테고리 컬럼 선택 시, 선택된 컬럼의 테이블 이름과 컬럼 이름을 함께 전달하도록 개선하였습니다.
This commit is contained in:
kjs 2026-01-26 14:55:36 +09:00
parent 607d686535
commit 351d53cd0c
3 changed files with 13 additions and 14 deletions

View File

@ -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"
});
}

View File

@ -1810,7 +1810,7 @@ export default function TableManagementPage() {
<CommandGroup>
<CommandItem
value="none"
onSelect={async () => {
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() {
<CommandItem
key={rule.ruleId}
value={`${rule.ruleName} ${rule.ruleId}`}
onSelect={async () => {
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"
>

View File

@ -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);