// 배치 실행 로그 컨트롤러 // 작성일: 2024-12-24 import { Request, Response } from "express"; import { AuthenticatedRequest } from "../types/auth"; import { BatchExecutionLogService } from "../services/batchExecutionLogService"; import { BatchExecutionLogFilter, CreateBatchExecutionLogRequest, UpdateBatchExecutionLogRequest, } from "../types/batchExecutionLogTypes"; export class BatchExecutionLogController { /** * 배치 실행 로그 목록 조회 */ static async getExecutionLogs(req: AuthenticatedRequest, res: Response) { try { const { batch_config_id, execution_status, start_date, end_date, page, limit, } = req.query; const filter: BatchExecutionLogFilter = { batch_config_id: batch_config_id ? Number(batch_config_id) : undefined, execution_status: execution_status as string, start_date: start_date ? new Date(start_date as string) : undefined, end_date: end_date ? new Date(end_date as string) : undefined, page: page ? Number(page) : undefined, limit: limit ? Number(limit) : undefined, }; const userCompanyCode = req.user?.companyCode; const result = await BatchExecutionLogService.getExecutionLogs( filter, userCompanyCode ); if (result.success) { res.json(result); } else { res.status(500).json(result); } } catch (error) { console.error("배치 실행 로그 조회 오류:", error); res.status(500).json({ success: false, message: "배치 실행 로그 조회 중 오류가 발생했습니다.", error: error instanceof Error ? error.message : "알 수 없는 오류", }); } } /** * 배치 실행 로그 생성 */ static async createExecutionLog(req: AuthenticatedRequest, res: Response) { try { const data: CreateBatchExecutionLogRequest = req.body; // 멀티테넌시: company_code가 없으면 현재 사용자 회사 코드로 설정 if (!data.company_code) { data.company_code = req.user?.companyCode || "*"; } const result = await BatchExecutionLogService.createExecutionLog(data); if (result.success) { res.status(201).json(result); } else { res.status(500).json(result); } } catch (error) { console.error("배치 실행 로그 생성 오류:", error); res.status(500).json({ success: false, message: "배치 실행 로그 생성 중 오류가 발생했습니다.", error: error instanceof Error ? error.message : "알 수 없는 오류", }); } } /** * 배치 실행 로그 업데이트 */ static async updateExecutionLog(req: AuthenticatedRequest, res: Response) { try { const { id } = req.params; const data: UpdateBatchExecutionLogRequest = req.body; const result = await BatchExecutionLogService.updateExecutionLog( Number(id), data ); if (result.success) { res.json(result); } else { res.status(500).json(result); } } catch (error) { console.error("배치 실행 로그 업데이트 오류:", error); res.status(500).json({ success: false, message: "배치 실행 로그 업데이트 중 오류가 발생했습니다.", error: error instanceof Error ? error.message : "알 수 없는 오류", }); } } /** * 배치 실행 로그 삭제 */ static async deleteExecutionLog(req: AuthenticatedRequest, res: Response) { try { const { id } = req.params; const result = await BatchExecutionLogService.deleteExecutionLog( Number(id) ); if (result.success) { res.json(result); } else { res.status(500).json(result); } } catch (error) { console.error("배치 실행 로그 삭제 오류:", error); res.status(500).json({ success: false, message: "배치 실행 로그 삭제 중 오류가 발생했습니다.", error: error instanceof Error ? error.message : "알 수 없는 오류", }); } } /** * 특정 배치의 최신 실행 로그 조회 */ static async getLatestExecutionLog(req: AuthenticatedRequest, res: Response) { try { const { batchConfigId } = req.params; const result = await BatchExecutionLogService.getLatestExecutionLog( Number(batchConfigId) ); if (result.success) { res.json(result); } else { res.status(500).json(result); } } catch (error) { console.error("최신 배치 실행 로그 조회 오류:", error); res.status(500).json({ success: false, message: "최신 배치 실행 로그 조회 중 오류가 발생했습니다.", error: error instanceof Error ? error.message : "알 수 없는 오류", }); } } /** * 배치 실행 통계 조회 */ static async getExecutionStats(req: AuthenticatedRequest, res: Response) { try { const { batch_config_id, start_date, end_date } = req.query; const result = await BatchExecutionLogService.getExecutionStats( batch_config_id ? Number(batch_config_id) : undefined, start_date ? new Date(start_date as string) : undefined, end_date ? new Date(end_date as string) : undefined ); if (result.success) { res.json(result); } else { res.status(500).json(result); } } catch (error) { console.error("배치 실행 통계 조회 오류:", error); res.status(500).json({ success: false, message: "배치 실행 통계 조회 중 오류가 발생했습니다.", error: error instanceof Error ? error.message : "알 수 없는 오류", }); } } }