Files
vexplor/backend-node/src/routes/tableManagementRoutes.ts
kjs 23911d3dd8 feat: 카테고리 컴포넌트 메뉴 스코프 전환 완료
 구현 내용:
1. 백엔드 API 추가
   - GET /api/table-management/menu/:menuObjid/category-columns
   - 형제 메뉴들의 테이블에서 카테고리 타입 컬럼 조회
   - menuService.getSiblingMenuObjids() 재사용

2. 프론트엔드 CategoryWidget 수정
   - menuObjid를 props로 받아 CategoryColumnList에 전달
   - effectiveMenuObjid로 props.menuObjid도 처리
   - 선택된 컬럼에 tableName 포함하여 상태 관리

3. CategoryColumnList 수정
   - menuObjid 기반으로 형제 메뉴의 모든 카테고리 컬럼 조회
   - 테이블명+컬럼명 함께 표시
   - onColumnSelect에 tableName 전달

4. 메뉴 네비게이션 수정
   - AppLayout.tsx: 화면 이동 시 menuObjid를 URL 쿼리 파라미터로 전달
   - useMenu.ts: 동일하게 menuObjid 전달
   - page.tsx: 자식 컴포넌트에도 menuObjid 전달

🎯 효과:
- 이제 형제 메뉴들이 서로 다른 테이블을 사용해도 카테고리 공유 가능
- 메뉴 클릭 → 화면 이동 시 자동으로 menuObjid 전달
- 카테고리 위젯이 형제 메뉴의 모든 카테고리 컬럼 표시
2025-11-11 14:44:22 +09:00

202 lines
5.3 KiB
TypeScript

import express from "express";
import { authenticateToken } from "../middleware/authMiddleware";
import {
getTableList,
getColumnList,
updateColumnSettings,
updateAllColumnSettings,
getTableLabels,
getColumnLabels,
updateColumnWebType,
updateColumnInputType,
updateTableLabel,
getTableData,
getTableRecord, // 🆕 단일 레코드 조회
addTableData,
editTableData,
deleteTableData,
getTableSchema,
checkTableExists,
getColumnWebTypes,
checkDatabaseConnection,
createLogTable,
getLogConfig,
getLogData,
toggleLogTable,
getCategoryColumnsByMenu, // 🆕 메뉴별 카테고리 컬럼 조회
} from "../controllers/tableManagementController";
const router = express.Router();
// 모든 라우트에 인증 미들웨어 적용
router.use(authenticateToken);
/**
* 테이블 목록 조회
* GET /api/table-management/tables
*/
router.get("/tables", getTableList);
/**
* 테이블 컬럼 정보 조회
* GET /api/table-management/tables/:tableName/columns
*/
router.get("/tables/:tableName/columns", getColumnList);
/**
* 테이블 라벨 설정
* PUT /api/table-management/tables/:tableName/label
*/
router.put("/tables/:tableName/label", updateTableLabel);
/**
* 개별 컬럼 설정 업데이트
* POST /api/table-management/tables/:tableName/columns/:columnName/settings
*/
router.post(
"/tables/:tableName/columns/:columnName/settings",
updateColumnSettings
);
/**
* 전체 컬럼 설정 일괄 업데이트
* POST /api/table-management/tables/:tableName/columns/settings
*/
router.post("/tables/:tableName/columns/settings", updateAllColumnSettings);
/**
* 테이블 라벨 정보 조회
* GET /api/table-management/tables/:tableName/labels
*/
router.get("/tables/:tableName/labels", getTableLabels);
/**
* 컬럼 라벨 정보 조회
* GET /api/table-management/tables/:tableName/columns/:columnName/labels
*/
router.get("/tables/:tableName/columns/:columnName/labels", getColumnLabels);
/**
* 컬럼 웹 타입 설정 (레거시 지원)
* PUT /api/table-management/tables/:tableName/columns/:columnName/web-type
*/
router.put(
"/tables/:tableName/columns/:columnName/web-type",
updateColumnWebType
);
/**
* 컬럼 입력 타입 설정 (새로운 시스템)
* PUT /api/table-management/tables/:tableName/columns/:columnName/input-type
*/
router.put(
"/tables/:tableName/columns/:columnName/input-type",
updateColumnInputType
);
/**
* 개별 컬럼 설정 업데이트 (PUT 방식)
* PUT /api/table-management/tables/:tableName/columns/:columnName
*/
router.put("/tables/:tableName/columns/:columnName", updateColumnSettings);
/**
* 여러 컬럼 설정 일괄 업데이트
* PUT /api/table-management/tables/:tableName/columns/batch
*/
router.put("/tables/:tableName/columns/batch", updateAllColumnSettings);
/**
* 테이블 스키마 정보 조회 (컬럼 존재 여부 검증용)
* GET /api/table-management/tables/:tableName/schema
*/
router.get("/tables/:tableName/schema", getTableSchema);
/**
* 테이블 존재 여부 확인
* GET /api/table-management/tables/:tableName/exists
*/
router.get("/tables/:tableName/exists", checkTableExists);
/**
* 컬럼 웹타입 정보 조회 (화면관리 연동용)
* GET /api/table-management/tables/:tableName/web-types
*/
router.get("/tables/:tableName/web-types", getColumnWebTypes);
/**
* 데이터베이스 연결 상태 확인
* GET /api/table-management/health
*/
router.get("/health", checkDatabaseConnection);
/**
* 테이블 데이터 조회 (페이징 + 검색)
* POST /api/table-management/tables/:tableName/data
*/
router.post("/tables/:tableName/data", getTableData);
/**
* 단일 레코드 조회 (자동 입력용)
* POST /api/table-management/tables/:tableName/record
*/
router.post("/tables/:tableName/record", getTableRecord);
/**
* 테이블 데이터 추가
* POST /api/table-management/tables/:tableName/add
*/
router.post("/tables/:tableName/add", addTableData);
/**
* 테이블 데이터 수정
* PUT /api/table-management/tables/:tableName/edit
*/
router.put("/tables/:tableName/edit", editTableData);
/**
* 테이블 데이터 삭제
* DELETE /api/table-management/tables/:tableName/delete
*/
router.delete("/tables/:tableName/delete", deleteTableData);
// ========================================
// 테이블 로그 시스템 API
// ========================================
/**
* 로그 테이블 생성
* POST /api/table-management/tables/:tableName/log
*/
router.post("/tables/:tableName/log", createLogTable);
/**
* 로그 설정 조회
* GET /api/table-management/tables/:tableName/log/config
*/
router.get("/tables/:tableName/log/config", getLogConfig);
/**
* 로그 데이터 조회
* GET /api/table-management/tables/:tableName/log
*/
router.get("/tables/:tableName/log", getLogData);
/**
* 로그 테이블 활성화/비활성화
* POST /api/table-management/tables/:tableName/log/toggle
*/
router.post("/tables/:tableName/log/toggle", toggleLogTable);
// ========================================
// 메뉴 기반 카테고리 관리 API
// ========================================
/**
* 메뉴의 형제 메뉴들이 사용하는 모든 테이블의 카테고리 타입 컬럼 조회
* GET /api/table-management/menu/:menuObjid/category-columns
*/
router.get("/menu/:menuObjid/category-columns", getCategoryColumnsByMenu);
export default router;