import { Request, Response } from 'express'; import { mailSentHistoryService } from '../services/mailSentHistoryService'; export class MailSentHistoryController { /** * 발송 이력 목록 조회 */ async getList(req: Request, res: Response) { try { const query = { page: req.query.page ? parseInt(req.query.page as string) : undefined, limit: req.query.limit ? parseInt(req.query.limit as string) : undefined, searchTerm: req.query.searchTerm as string | undefined, status: req.query.status as 'success' | 'failed' | 'all' | undefined, accountId: req.query.accountId as string | undefined, startDate: req.query.startDate as string | undefined, endDate: req.query.endDate as string | undefined, sortBy: req.query.sortBy as 'sentAt' | 'subject' | undefined, sortOrder: req.query.sortOrder as 'asc' | 'desc' | undefined, }; const result = await mailSentHistoryService.getSentMailList(query); return res.json({ success: true, data: result, }); } catch (error: unknown) { const err = error as Error; console.error('발송 이력 목록 조회 실패:', err); return res.status(500).json({ success: false, message: '발송 이력 조회 중 오류가 발생했습니다.', error: err.message, }); } } /** * 특정 발송 이력 상세 조회 */ async getById(req: Request, res: Response) { try { const { id } = req.params; if (!id) { return res.status(400).json({ success: false, message: '발송 이력 ID가 필요합니다.', }); } const history = await mailSentHistoryService.getSentMailById(id); if (!history) { return res.status(404).json({ success: false, message: '발송 이력을 찾을 수 없습니다.', }); } return res.json({ success: true, data: history, }); } catch (error: unknown) { const err = error as Error; console.error('발송 이력 조회 실패:', err); return res.status(500).json({ success: false, message: '발송 이력 조회 중 오류가 발생했습니다.', error: err.message, }); } } /** * 발송 이력 삭제 */ async deleteById(req: Request, res: Response) { try { const { id } = req.params; if (!id) { return res.status(400).json({ success: false, message: '발송 이력 ID가 필요합니다.', }); } const success = await mailSentHistoryService.deleteSentMail(id); if (!success) { return res.status(404).json({ success: false, message: '발송 이력을 찾을 수 없습니다.', }); } return res.json({ success: true, message: '발송 이력이 삭제되었습니다.', }); } catch (error: unknown) { const err = error as Error; console.error('발송 이력 삭제 실패:', err); return res.status(500).json({ success: false, message: '발송 이력 삭제 중 오류가 발생했습니다.', error: err.message, }); } } /** * 통계 조회 */ async getStatistics(req: Request, res: Response) { try { const accountId = req.query.accountId as string | undefined; const stats = await mailSentHistoryService.getStatistics(accountId); return res.json({ success: true, data: stats, }); } catch (error: unknown) { const err = error as Error; console.error('통계 조회 실패:', err); return res.status(500).json({ success: false, message: '통계 조회 중 오류가 발생했습니다.', error: err.message, }); } } } export const mailSentHistoryController = new MailSentHistoryController();