Files
vexplor/backend-node/src/routes/userMailRoutes.ts
syc0123 4c42cc7b53 feat: 사용자 메일 관리 IMAP 구현
- IMAP 계정 등록/수정/삭제/연결테스트
- SSE 스트리밍으로 메일 목록 로드 (폴더별 지원)
- 메일 상세 조회, 읽음 처리, 삭제(휴지통 이동), 폴더 이동
- 첨부파일 다운로드 (ReadableStream 진행바)
- SMTP 발송, 답장, 전달
- imapConnectionPool, mailCache 서비스
- encryptionService Node 22+ 호환 수정
- authMiddleware query token 지원 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 17:17:20 +09:00

27 lines
2.1 KiB
TypeScript

import express from 'express';
import { authenticateToken } from '../middleware/authMiddleware';
import { userMailController } from '../controllers/userMailController';
const router = express.Router();
router.use(authenticateToken);
router.post('/test-connection', (req, res) => userMailController.testConnectionDirect(req as any, res));
router.get('/accounts', (req, res) => userMailController.listAccounts(req as any, res));
router.post('/accounts', (req, res) => userMailController.createAccount(req as any, res));
router.put('/accounts/:accountId', (req, res) => userMailController.updateAccount(req as any, res));
router.delete('/accounts/:accountId', (req, res) => userMailController.deleteAccount(req as any, res));
router.post('/accounts/:accountId/test', (req, res) => userMailController.testConnection(req as any, res));
router.get('/accounts/:accountId/mails/stream', (req, res) => userMailController.streamMails(req as any, res));
router.get('/accounts/:accountId/mails', (req, res) => userMailController.listMails(req as any, res));
router.get('/accounts/:accountId/mails/:seqno', (req, res) => userMailController.getMailDetail(req as any, res));
router.post('/accounts/:accountId/mails/:seqno/mark-read', (req, res) => userMailController.markAsRead(req as any, res));
router.delete('/accounts/:accountId/mails/:seqno', (req, res) => userMailController.deleteMail(req as any, res));
router.get('/accounts/:accountId/folders', (req, res) => userMailController.listFolders(req as any, res));
router.get('/accounts/:accountId/folders/:folder/mails/stream', (req, res) => userMailController.streamFolderMails(req as any, res));
router.post('/accounts/:accountId/mails/:seqno/move', (req, res) => userMailController.moveMail(req as any, res));
router.get('/accounts/:accountId/mails/:seqno/attachments', (req, res) => userMailController.getAttachments(req as any, res));
router.get('/accounts/:accountId/mails/:seqno/attachment/:partId', (req, res) => userMailController.downloadAttachment(req as any, res));
router.post('/accounts/:accountId/send', (req, res) => userMailController.sendMail(req as any, res));
export default router;