import { Router } from "express"; import { uploadFiles, deleteFile, getFileList, getComponentFiles, downloadFile, previewFile, getLinkedFiles, uploadMiddleware, generateTempToken, getFileByToken, } from "../controllers/fileController"; import { authenticateToken } from "../middleware/authMiddleware"; const router = Router(); // 공개 접근 라우트 (인증 불필요) /** * @route GET /api/files/public/:token * @desc 임시 토큰으로 파일 접근 (Google Docs Viewer용) * @access Public */ router.get("/public/:token", getFileByToken); // 모든 파일 API는 인증 필요 router.use(authenticateToken); /** * @route POST /api/files/upload * @desc 파일 업로드 (attach_file_info 테이블에 저장) * @access Private */ router.post("/upload", uploadMiddleware, uploadFiles); /** * @route GET /api/files * @desc 파일 목록 조회 * @query targetObjid, docType, companyCode * @access Private */ router.get("/", getFileList); /** * @route GET /api/files/component-files * @desc 컴포넌트의 템플릿 파일과 데이터 파일 모두 조회 * @query screenId, componentId, tableName, recordId, columnName * @access Private */ router.get("/component-files", getComponentFiles); /** * @route GET /api/files/linked/:tableName/:recordId * @desc 테이블 연결된 파일 조회 * @access Private */ router.get("/linked/:tableName/:recordId", getLinkedFiles); /** * @route DELETE /api/files/:objid * @desc 파일 삭제 (논리적 삭제) * @access Private */ router.delete("/:objid", deleteFile); /** * @route GET /api/files/preview/:objid * @desc 파일 미리보기 (이미지 등) * @access Private */ router.get("/preview/:objid", previewFile); /** * @route GET /api/files/download/:objid * @desc 파일 다운로드 * @access Private */ router.get("/download/:objid", downloadFile); /** * @route POST /api/files/temp-token/:objid * @desc Google Docs Viewer용 임시 공개 토큰 생성 * @access Private */ router.post("/temp-token/:objid", generateTempToken); export default router;