import express from "express"; import { authenticateToken } from "../middleware/authMiddleware"; import { getScreens, getScreen, getScreenMenu, createScreen, updateScreen, updateScreenInfo, deleteScreen, bulkDeleteScreens, checkScreenDependencies, restoreScreen, permanentDeleteScreen, getDeletedScreens, bulkPermanentDeleteScreens, detectLinkedScreens, checkDuplicateScreenName, copyScreen, copyScreenWithModals, getTables, getTableInfo, getTableColumns, saveLayout, getLayout, getLayoutV1, getLayoutV2, saveLayoutV2, generateScreenCode, generateMultipleScreenCodes, assignScreenToMenu, getScreensByMenu, unassignScreenFromMenu, cleanupDeletedScreenMenuAssignments, updateTabScreenReferences, copyScreenMenuAssignments, copyCodeCategoryAndCodes, copyCategoryMapping, copyTableTypeColumns, copyCascadingRelation, } from "../controllers/screenManagementController"; const router = express.Router(); // 모든 라우트에 인증 미들웨어 적용 router.use(authenticateToken); // 화면 관리 router.get("/screens", getScreens); router.get("/screens/:id", getScreen); router.get("/screens/:id/menu", getScreenMenu); // 화면에 할당된 메뉴 조회 router.post("/screens", createScreen); router.put("/screens/:id", updateScreen); router.put("/screens/:id/info", updateScreenInfo); // 화면 정보만 수정 router.get("/screens/:id/dependencies", checkScreenDependencies); // 의존성 체크 router.delete("/screens/:id", deleteScreen); // 휴지통으로 이동 router.delete("/screens/bulk/delete", bulkDeleteScreens); // 활성 화면 일괄 삭제 (휴지통으로 이동) router.get("/screens/:id/linked-modals", detectLinkedScreens); // 연결된 모달 화면 감지 router.post("/screens/check-duplicate-name", checkDuplicateScreenName); // 화면명 중복 체크 router.post("/screens/:id/copy", copyScreen); // 단일 화면 복사 (하위 호환용) router.post("/screens/:id/copy-with-modals", copyScreenWithModals); // 메인 + 모달 일괄 복사 // 휴지통 관리 router.get("/screens/trash/list", getDeletedScreens); // 휴지통 화면 목록 router.post("/screens/:id/restore", restoreScreen); // 휴지통에서 복원 router.delete("/screens/:id/permanent", permanentDeleteScreen); // 영구 삭제 router.delete("/screens/trash/bulk", bulkPermanentDeleteScreens); // 일괄 영구 삭제 // 화면 코드 자동 생성 router.get("/generate-screen-code/:companyCode", generateScreenCode); // 여러 개의 화면 코드 일괄 생성 router.post("/generate-screen-codes", generateMultipleScreenCodes); // 테이블 관리 router.get("/tables", getTables); router.get("/tables/:tableName", getTableInfo); // 특정 테이블 정보 조회 (최적화) router.get("/tables/:tableName/columns", getTableColumns); // 레이아웃 관리 router.post("/screens/:screenId/layout", saveLayout); router.get("/screens/:screenId/layout", getLayout); router.get("/screens/:screenId/layout-v1", getLayoutV1); // V1: component_url + custom_config 기반 (다중 레코드) router.get("/screens/:screenId/layout-v2", getLayoutV2); // V2: 1 레코드 방식 (url + overrides) router.post("/screens/:screenId/layout-v2", saveLayoutV2); // V2: 1 레코드 방식 저장 // 메뉴-화면 할당 관리 router.post("/screens/:screenId/assign-menu", assignScreenToMenu); router.get("/menus/:menuObjid/screens", getScreensByMenu); router.delete("/screens/:screenId/menus/:menuObjid", unassignScreenFromMenu); // 관리자용 정리 기능 router.post( "/admin/cleanup-deleted-screen-menu-assignments", cleanupDeletedScreenMenuAssignments ); // 그룹 복제 완료 후 탭 컴포넌트의 screenId 참조 일괄 업데이트 router.post("/screens/update-tab-references", updateTabScreenReferences); // 화면-메뉴 할당 복제 (다른 회사로 복제 시) router.post("/copy-menu-assignments", copyScreenMenuAssignments); // 코드 카테고리 + 코드 복제 router.post("/copy-code-category", copyCodeCategoryAndCodes); // 카테고리 매핑 + 값 복제 router.post("/copy-category-mapping", copyCategoryMapping); // 테이블 타입 컬럼 복제 router.post("/copy-table-type-columns", copyTableTypeColumns); // 연쇄관계 설정 복제 router.post("/copy-cascading-relation", copyCascadingRelation); export default router;