summaryrefslogtreecommitdiff
path: root/lib/approval/approval-polling-service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/approval/approval-polling-service.ts')
-rw-r--r--lib/approval/approval-polling-service.ts24
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 {