ERP-node/backend-node/src/routes/tableManagementRoutes.ts

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;