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

74 lines
1.9 KiB
TypeScript

import { Router } from "express";
import { DashboardController } from "../controllers/DashboardController";
import { authenticateToken } from "../middleware/authMiddleware";
const router = Router();
const dashboardController = new DashboardController();
/**
* 대시보드 API 라우트
*
* 모든 엔드포인트는 인증이 필요하지만,
* 공개 대시보드 조회는 인증 없이도 가능
*/
// 공개 대시보드 목록 조회 (인증 불필요)
router.get(
"/public",
dashboardController.getDashboards.bind(dashboardController)
);
// 공개 대시보드 상세 조회 (인증 불필요)
router.get(
"/public/:id",
dashboardController.getDashboard.bind(dashboardController)
);
// 쿼리 실행 (SELECT만, 인증 불필요 - 개발용)
router.post(
"/execute-query",
dashboardController.executeQuery.bind(dashboardController)
);
// DML 쿼리 실행 (INSERT/UPDATE/DELETE, 인증 불필요 - 개발용)
router.post(
"/execute-dml",
dashboardController.executeDML.bind(dashboardController)
);
// 외부 API 프록시 (CORS 우회)
router.post(
"/fetch-external-api",
dashboardController.fetchExternalApi.bind(dashboardController)
);
// 테이블 스키마 조회 (날짜 컬럼 감지용)
router.post(
"/table-schema",
dashboardController.getTableSchema.bind(dashboardController)
);
// 인증이 필요한 라우트들
router.use(authenticateToken);
// 내 대시보드 목록 조회
router.get(
"/my",
dashboardController.getMyDashboards.bind(dashboardController)
);
// 대시보드 CRUD
router.post("/", dashboardController.createDashboard.bind(dashboardController));
router.get("/", dashboardController.getDashboards.bind(dashboardController));
router.get("/:id", dashboardController.getDashboard.bind(dashboardController));
router.put(
"/:id",
dashboardController.updateDashboard.bind(dashboardController)
);
router.delete(
"/:id",
dashboardController.deleteDashboard.bind(dashboardController)
);
export default router;