216 lines
5.8 KiB
TypeScript
216 lines
5.8 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, // 🆕 메뉴별 카테고리 컬럼 조회
|
|
multiTableSave, // 🆕 범용 다중 테이블 저장
|
|
} 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);
|
|
|
|
// ========================================
|
|
// 범용 다중 테이블 저장 API
|
|
// ========================================
|
|
|
|
/**
|
|
* 다중 테이블 저장 (메인 + 서브 테이블)
|
|
* POST /api/table-management/multi-table-save
|
|
*
|
|
* 메인 테이블과 서브 테이블(들)에 트랜잭션으로 데이터를 저장합니다.
|
|
* 사원+부서, 주문+주문상세 등 1:N 관계 데이터 저장에 사용됩니다.
|
|
*/
|
|
router.post("/multi-table-save", multiTableSave);
|
|
|
|
export default router;
|