feat: 채번 규칙 저장 API 및 테이블 관리 기능 개선
- 채번 규칙 저장 API에서 ruleName을 필수로 설정하고, tableName과 columnName은 선택적으로 변경하였습니다. - 테이블 관리 페이지에서 자동 저장 기능을 제거하고, 전체 저장 버튼으로 저장하도록 수정하였습니다. - 카테고리 컬럼 선택 시, 선택된 컬럼의 테이블 이름과 컬럼 이름을 함께 전달하도록 개선하였습니다.
This commit is contained in:
parent
607d686535
commit
351d53cd0c
|
|
@ -284,6 +284,7 @@ router.get("/test/by-column/:tableName/:columnName", authenticateToken, async (r
|
||||||
});
|
});
|
||||||
|
|
||||||
// [테스트] 테스트 테이블에 채번 규칙 저장
|
// [테스트] 테스트 테이블에 채번 규칙 저장
|
||||||
|
// 채번 규칙은 독립적으로 생성 가능 (나중에 테이블 타입 관리에서 컬럼에 연결)
|
||||||
router.post("/test/save", authenticateToken, async (req: AuthenticatedRequest, res: Response) => {
|
router.post("/test/save", authenticateToken, async (req: AuthenticatedRequest, res: Response) => {
|
||||||
const companyCode = req.user!.companyCode;
|
const companyCode = req.user!.companyCode;
|
||||||
const userId = req.user!.userId;
|
const userId = req.user!.userId;
|
||||||
|
|
@ -291,15 +292,17 @@ router.post("/test/save", authenticateToken, async (req: AuthenticatedRequest, r
|
||||||
|
|
||||||
logger.info("[테스트] 채번 규칙 저장 요청", {
|
logger.info("[테스트] 채번 규칙 저장 요청", {
|
||||||
ruleId: ruleConfig.ruleId,
|
ruleId: ruleConfig.ruleId,
|
||||||
tableName: ruleConfig.tableName,
|
ruleName: ruleConfig.ruleName,
|
||||||
columnName: ruleConfig.columnName,
|
tableName: ruleConfig.tableName || "(미지정)",
|
||||||
|
columnName: ruleConfig.columnName || "(미지정)",
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!ruleConfig.tableName || !ruleConfig.columnName) {
|
// ruleName만 필수, tableName/columnName은 선택 (나중에 테이블 타입 관리에서 연결)
|
||||||
|
if (!ruleConfig.ruleName) {
|
||||||
return res.status(400).json({
|
return res.status(400).json({
|
||||||
success: false,
|
success: false,
|
||||||
error: "tableName and columnName are required"
|
error: "ruleName is required"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1810,7 +1810,7 @@ export default function TableManagementPage() {
|
||||||
<CommandGroup>
|
<CommandGroup>
|
||||||
<CommandItem
|
<CommandItem
|
||||||
value="none"
|
value="none"
|
||||||
onSelect={async () => {
|
onSelect={() => {
|
||||||
const columnIndex = columns.findIndex(
|
const columnIndex = columns.findIndex(
|
||||||
(c) => c.columnName === column.columnName,
|
(c) => c.columnName === column.columnName,
|
||||||
);
|
);
|
||||||
|
|
@ -1819,9 +1819,7 @@ export default function TableManagementPage() {
|
||||||
...prev,
|
...prev,
|
||||||
[column.columnName]: false,
|
[column.columnName]: false,
|
||||||
}));
|
}));
|
||||||
// 🆕 자동 저장 (선택 해제)
|
// 자동 저장 제거 - 전체 저장 버튼으로 저장
|
||||||
const updatedColumn = { ...column, numberingRuleId: undefined };
|
|
||||||
await handleSaveColumn(updatedColumn);
|
|
||||||
}}
|
}}
|
||||||
className="text-xs"
|
className="text-xs"
|
||||||
>
|
>
|
||||||
|
|
@ -1837,19 +1835,17 @@ export default function TableManagementPage() {
|
||||||
<CommandItem
|
<CommandItem
|
||||||
key={rule.ruleId}
|
key={rule.ruleId}
|
||||||
value={`${rule.ruleName} ${rule.ruleId}`}
|
value={`${rule.ruleName} ${rule.ruleId}`}
|
||||||
onSelect={async () => {
|
onSelect={() => {
|
||||||
const columnIndex = columns.findIndex(
|
const columnIndex = columns.findIndex(
|
||||||
(c) => c.columnName === column.columnName,
|
(c) => c.columnName === column.columnName,
|
||||||
);
|
);
|
||||||
// 상태 업데이트
|
// 상태 업데이트만 (자동 저장 제거)
|
||||||
handleColumnChange(columnIndex, "numberingRuleId", rule.ruleId);
|
handleColumnChange(columnIndex, "numberingRuleId", rule.ruleId);
|
||||||
setNumberingComboboxOpen((prev) => ({
|
setNumberingComboboxOpen((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
[column.columnName]: false,
|
[column.columnName]: false,
|
||||||
}));
|
}));
|
||||||
// 🆕 자동 저장
|
// 전체 저장 버튼으로 저장
|
||||||
const updatedColumn = { ...column, numberingRuleId: rule.ruleId };
|
|
||||||
await handleSaveColumn(updatedColumn);
|
|
||||||
}}
|
}}
|
||||||
className="text-xs"
|
className="text-xs"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -196,7 +196,7 @@ export function CategoryColumnList({ tableName, selectedColumn, onColumnSelect,
|
||||||
// 첫 번째 컬럼 자동 선택
|
// 첫 번째 컬럼 자동 선택
|
||||||
if (columnsWithCount.length > 0 && !selectedColumn) {
|
if (columnsWithCount.length > 0 && !selectedColumn) {
|
||||||
const firstCol = columnsWithCount[0];
|
const firstCol = columnsWithCount[0];
|
||||||
onColumnSelect(firstCol.columnName, firstCol.columnLabel, firstCol.tableName);
|
onColumnSelect(`${firstCol.tableName}.${firstCol.columnName}`, firstCol.columnLabel, firstCol.tableName);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("❌ 카테고리 컬럼 조회 실패:", error);
|
console.error("❌ 카테고리 컬럼 조회 실패:", error);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue