import { Router } from "express"; import reportController from "../controllers/reportController"; import { authenticateToken } from "../middleware/authMiddleware"; import multer from "multer"; const router = Router(); // Multer 설정 (메모리 저장) const upload = multer({ storage: multer.memoryStorage(), limits: { fileSize: 10 * 1024 * 1024, // 10MB 제한 }, fileFilter: (req, file, cb) => { // 이미지 파일만 허용 const allowedTypes = [ "image/jpeg", "image/jpg", "image/png", "image/gif", "image/webp", ]; if (allowedTypes.includes(file.mimetype)) { cb(null, true); } else { cb(new Error("이미지 파일만 업로드 가능합니다. (jpg, png, gif, webp)")); } }, }); // 모든 리포트 API는 인증이 필요 router.use(authenticateToken); // 외부 DB 연결 목록 (구체적인 경로를 먼저 배치) router.get("/external-connections", (req, res, next) => reportController.getExternalConnections(req, res, next) ); // 템플릿 관련 라우트 router.get("/templates", (req, res, next) => reportController.getTemplates(req, res, next) ); router.post("/templates", (req, res, next) => reportController.createTemplate(req, res, next) ); // 레이아웃 데이터로 직접 템플릿 생성 (리포트 저장 불필요) router.post("/templates/create-from-layout", (req, res, next) => reportController.createTemplateFromLayout(req, res, next) ); router.delete("/templates/:templateId", (req, res, next) => reportController.deleteTemplate(req, res, next) ); // 이미지 업로드 (구체적인 경로를 먼저 배치) router.post("/upload-image", upload.single("image"), (req, res, next) => reportController.uploadImage(req, res, next) ); // 리포트 목록 router.get("/", (req, res, next) => reportController.getReports(req, res, next) ); // 리포트 생성 router.post("/", (req, res, next) => reportController.createReport(req, res, next) ); // 리포트 복사 (구체적인 경로를 먼저 배치) router.post("/:reportId/copy", (req, res, next) => reportController.copyReport(req, res, next) ); // 템플릿으로 저장 router.post("/:reportId/save-as-template", (req, res, next) => reportController.saveAsTemplate(req, res, next) ); // 레이아웃 관련 라우트 router.get("/:reportId/layout", (req, res, next) => reportController.getLayout(req, res, next) ); router.put("/:reportId/layout", (req, res, next) => reportController.saveLayout(req, res, next) ); // 쿼리 실행 router.post("/:reportId/queries/:queryId/execute", (req, res, next) => reportController.executeQuery(req, res, next) ); // 리포트 상세 router.get("/:reportId", (req, res, next) => reportController.getReportById(req, res, next) ); // 리포트 수정 router.put("/:reportId", (req, res, next) => reportController.updateReport(req, res, next) ); // 리포트 삭제 router.delete("/:reportId", (req, res, next) => reportController.deleteReport(req, res, next) ); export default router;