diff options
Diffstat (limited to 'lib/approval/approval-polling-service.ts')
| -rw-r--r-- | lib/approval/approval-polling-service.ts | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/lib/approval/approval-polling-service.ts b/lib/approval/approval-polling-service.ts index d2ee16cb..79a83c2e 100644 --- a/lib/approval/approval-polling-service.ts +++ b/lib/approval/approval-polling-service.ts @@ -18,7 +18,7 @@ import cron from 'node-cron'; import db from '@/db/db'; import { eq, and, inArray } from 'drizzle-orm'; -import { executeApprovedAction, handleRejectedAction } from './approval-workflow'; +import { ApprovalExecutionSaga, ApprovalRejectionSaga } from './approval-saga'; /** * Pending 상태의 결재들을 조회하고 상태 동기화 @@ -117,7 +117,9 @@ export async function checkPendingApprovals() { // 완결(2), 전결(5), 후완결(6) if (['2', '5', '6'].includes(newStatus)) { try { - await executeApprovedAction(currentApproval.apInfId); + // Saga 패턴으로 액션 실행 + const executionSaga = new ApprovalExecutionSaga(currentApproval.apInfId); + await executionSaga.execute(); executed++; console.log(`[Approval Polling] ✅ Executed approved action: ${statusData.apInfId}`); } catch (execError) { @@ -129,7 +131,9 @@ export async function checkPendingApprovals() { // 반려된 경우 else if (newStatus === '3') { try { - await handleRejectedAction(currentApproval.apInfId, '결재가 반려되었습니다'); + // Saga 패턴으로 반려 처리 + const rejectionSaga = new ApprovalRejectionSaga(currentApproval.apInfId, '결재가 반려되었습니다'); + await rejectionSaga.execute(); console.log(`[Approval Polling] ⛔ Handled rejected action: ${statusData.apInfId}`); } catch (rejectError) { console.error(`[Approval Polling] Failed to handle rejection: ${statusData.apInfId}`, rejectError); @@ -139,7 +143,9 @@ export async function checkPendingApprovals() { // 상신취소된 경우 else if (newStatus === '4') { try { - await handleRejectedAction(currentApproval.apInfId, '결재가 취소되었습니다'); + // Saga 패턴으로 취소 처리 + const cancellationSaga = new ApprovalRejectionSaga(currentApproval.apInfId, '결재가 취소되었습니다'); + await cancellationSaga.execute(); console.log(`[Approval Polling] 🚫 Handled cancelled action: ${statusData.apInfId}`); } catch (cancelError) { console.error(`[Approval Polling] Failed to handle cancellation: ${statusData.apInfId}`, cancelError); @@ -270,7 +276,9 @@ export async function checkSingleApprovalStatus(apInfId: string) { // 완결(2), 전결(5), 후완결(6) if (['2', '5', '6'].includes(newStatus)) { try { - await executeApprovedAction(approvalLog.apInfId); + // Saga 패턴으로 액션 실행 + const executionSaga = new ApprovalExecutionSaga(approvalLog.apInfId); + await executionSaga.execute(); executed = true; console.log(`[Approval Polling] ✅ Single check - Executed approved action: ${apInfId}`); } catch (execError) { @@ -279,12 +287,14 @@ export async function checkSingleApprovalStatus(apInfId: string) { } // 반려(3) else if (newStatus === '3') { - await handleRejectedAction(approvalLog.apInfId, '결재가 반려되었습니다'); + const rejectionSaga = new ApprovalRejectionSaga(approvalLog.apInfId, '결재가 반려되었습니다'); + await rejectionSaga.execute(); console.log(`[Approval Polling] ⛔ Single check - Handled rejected action: ${apInfId}`); } // 상신취소(4) else if (newStatus === '4') { - await handleRejectedAction(approvalLog.apInfId, '결재가 취소되었습니다'); + const cancellationSaga = new ApprovalRejectionSaga(approvalLog.apInfId, '결재가 취소되었습니다'); + await cancellationSaga.execute(); console.log(`[Approval Polling] 🚫 Single check - Handled cancelled action: ${apInfId}`); } } else { |
