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

88 lines
2.0 KiB
TypeScript

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;