diff --git a/fems-api/src/routes/index.js b/fems-api/src/routes/index.js index 6879f37..99ff37e 100644 --- a/fems-api/src/routes/index.js +++ b/fems-api/src/routes/index.js @@ -1,14 +1,91 @@ // src/routes/index.js +// const logger = require("../config/logger"); +// const adminRoutes = require("./admin"); +// const appRoutes = require("./app"); + +// function registerRoutes(app) { +// // 기본 경로에 라우터 연결 +// app.use("/api/v1/admin", adminRoutes); +// app.use("/api/v1/app", appRoutes); + +// // 등록된 라우트 출력 (디버깅용) +// const routes = []; +// app._router.stack.forEach((middleware) => { +// if (middleware.route) { +// routes.push( +// `${Object.keys(middleware.route.methods)} ${middleware.route.path}` +// ); +// } else if (middleware.name === "router") { +// middleware.handle.stack.forEach((handler) => { +// if (handler.route) { +// routes.push( +// `${Object.keys(handler.route.methods)} ${handler.route.path}` +// ); +// } +// }); +// } +// }); + +// logger.info("Registered routes:"); +// routes.forEach((route) => logger.info(route)); +// } + +// module.exports = registerRoutes; + +const express = require("express"); +const menuConfig = require("../config/menuConfig"); +const menuAccessMiddleware = require("../middleware/menu.middleware"); const logger = require("../config/logger"); -const adminRoutes = require("./admin"); -const appRoutes = require("./app"); function registerRoutes(app) { - // 기본 경로에 라우터 연결 - app.use("/api/v1/admin", adminRoutes); - app.use("/api/v1/app", appRoutes); + // Admin 라우트 등록 + const adminRouter = express.Router(); + Object.entries(menuConfig.admin).forEach(([key, config]) => { + registerRouteWithPermissions(adminRouter, key, config); + }); + app.use("/api/v1/admin", adminRouter); - // 등록된 라우트 출력 (디버깅용) + // App 라우트 등록 + const appRouter = express.Router(); + Object.entries(menuConfig.app).forEach(([key, config]) => { + registerRouteWithPermissions(appRouter, key, config); + }); + app.use("/api/v1/app", appRouter); + + // 등록된 라우트 로깅 + logRegisteredRoutes(app); +} + +/** + * 권한이 적용된 라우트 등록 + */ +function registerRouteWithPermissions(router, key, config) { + const controller = require(`../controllers/${config.path.slice( + 1 + )}.controller`); + const path = `/${key}`; + + router.use(path, menuAccessMiddleware(config.path), controller); + + // 서브메뉴 등록 + if (config.subMenus) { + Object.entries(config.subMenus).forEach(([subKey, subConfig]) => { + const subController = require(`../controllers/${subConfig.path.slice( + 1 + )}.controller`); + router.use( + `${path}/${subKey}`, + menuAccessMiddleware(subConfig.path), + subController + ); + }); + } +} + +/** + * 등록된 라우트 로깅 + */ +function logRegisteredRoutes(app) { const routes = []; app._router.stack.forEach((middleware) => { if (middleware.route) {