From 35f130061a672d6c09bece41a3d24ab3a229fba9 Mon Sep 17 00:00:00 2001 From: dohyeons Date: Fri, 7 Nov 2025 10:22:49 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B9=8C=EB=93=9C=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tableCategoryValueController.ts | 2 +- .../src/routes/tableCategoryValueRoutes.ts | 42 +++++++------------ .../src/services/tableManagementService.ts | 16 ++++--- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/backend-node/src/controllers/tableCategoryValueController.ts b/backend-node/src/controllers/tableCategoryValueController.ts index 92f1f235..865f7672 100644 --- a/backend-node/src/controllers/tableCategoryValueController.ts +++ b/backend-node/src/controllers/tableCategoryValueController.ts @@ -167,7 +167,7 @@ export const deleteCategoryValue = async (req: AuthenticatedRequest, res: Respon * 카테고리 값 일괄 삭제 */ export const bulkDeleteCategoryValues = async ( - req: Request, + req: AuthenticatedRequest, res: Response ) => { try { diff --git a/backend-node/src/routes/tableCategoryValueRoutes.ts b/backend-node/src/routes/tableCategoryValueRoutes.ts index cc2ba05f..e20374d0 100644 --- a/backend-node/src/routes/tableCategoryValueRoutes.ts +++ b/backend-node/src/routes/tableCategoryValueRoutes.ts @@ -1,5 +1,13 @@ import { Router } from "express"; -import * as tableCategoryValueController from "../controllers/tableCategoryValueController"; +import { + getCategoryColumns, + getCategoryValues, + addCategoryValue, + updateCategoryValue, + deleteCategoryValue, + bulkDeleteCategoryValues, + reorderCategoryValues, +} from "../controllers/tableCategoryValueController"; import { authenticateToken } from "../middleware/authMiddleware"; const router = Router(); @@ -8,43 +16,25 @@ const router = Router(); router.use(authenticateToken); // 테이블의 카테고리 컬럼 목록 조회 -router.get( - "/:tableName/columns", - tableCategoryValueController.getCategoryColumns -); +router.get("/:tableName/columns", getCategoryColumns); // 카테고리 값 목록 조회 -router.get( - "/:tableName/:columnName/values", - tableCategoryValueController.getCategoryValues -); +router.get("/:tableName/:columnName/values", getCategoryValues); // 카테고리 값 추가 -router.post("/values", tableCategoryValueController.addCategoryValue); +router.post("/values", addCategoryValue); // 카테고리 값 수정 -router.put( - "/values/:valueId", - tableCategoryValueController.updateCategoryValue -); +router.put("/values/:valueId", updateCategoryValue); // 카테고리 값 삭제 -router.delete( - "/values/:valueId", - tableCategoryValueController.deleteCategoryValue -); +router.delete("/values/:valueId", deleteCategoryValue); // 카테고리 값 일괄 삭제 -router.post( - "/values/bulk-delete", - tableCategoryValueController.bulkDeleteCategoryValues -); +router.post("/values/bulk-delete", bulkDeleteCategoryValues); // 카테고리 값 순서 변경 -router.post( - "/values/reorder", - tableCategoryValueController.reorderCategoryValues -); +router.post("/values/reorder", reorderCategoryValues); export default router; diff --git a/backend-node/src/services/tableManagementService.ts b/backend-node/src/services/tableManagementService.ts index 93674bed..b45a0424 100644 --- a/backend-node/src/services/tableManagementService.ts +++ b/backend-node/src/services/tableManagementService.ts @@ -404,12 +404,16 @@ export class TableManagementService { // 🔥 table_type_columns도 업데이트 (멀티테넌시 지원) if (settings.inputType) { // detailSettings가 문자열이면 파싱, 객체면 그대로 사용 - let parsedDetailSettings = settings.detailSettings; - if (typeof settings.detailSettings === 'string') { - try { - parsedDetailSettings = JSON.parse(settings.detailSettings); - } catch (e) { - logger.warn(`detailSettings 파싱 실패, 그대로 사용: ${settings.detailSettings}`); + let parsedDetailSettings: Record | undefined = undefined; + if (settings.detailSettings) { + if (typeof settings.detailSettings === 'string') { + try { + parsedDetailSettings = JSON.parse(settings.detailSettings); + } catch (e) { + logger.warn(`detailSettings 파싱 실패, 그대로 사용: ${settings.detailSettings}`); + } + } else if (typeof settings.detailSettings === 'object') { + parsedDetailSettings = settings.detailSettings as Record; } }