1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
/**
* 결재 시스템 캐시 무효화 유틸리티
*
* 백그라운드 프로세스(폴링 서비스)에서 request 컨텍스트 없이
* Next.js 캐시를 무효화하기 위한 헬퍼 함수들
*/
/**
* 결재 관련 캐시 무효화
*
* @param tags - 무효화할 캐시 태그 배열
* @returns 무효화 결과
*
* @example
* // 결재 로그 캐시 무효화
* await revalidateApprovalCache(['approval-logs']);
*
* // 여러 캐시 동시 무효화
* await revalidateApprovalCache(['approval-logs', 'pending-actions']);
*/
export async function revalidateApprovalCache(tags: string[]) {
try {
// 내부 API 호출로 캐시 무효화
const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
const response = await fetch(`${baseUrl}/api/revalidate/approval`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
tags,
secret: process.env.REVALIDATION_SECRET, // 선택적 보안
}),
});
if (!response.ok) {
throw new Error(`Cache revalidation failed: ${response.statusText}`);
}
const result = await response.json();
console.log(`[Approval Cache] Successfully revalidated tags:`, tags);
return result;
} catch (error) {
// 캐시 무효화 실패는 치명적이지 않으므로 로그만 남기고 진행
console.error('[Approval Cache] Failed to revalidate cache:', error);
console.warn('[Approval Cache] Continuing despite cache revalidation failure');
return { success: false, error };
}
}
/**
* 결재 로그 캐시 무효화
*/
export async function revalidateApprovalLogs() {
return revalidateApprovalCache(['approval-logs']);
}
/**
* Pending Actions 캐시 무효화
*/
export async function revalidatePendingActions() {
return revalidateApprovalCache(['pending-actions']);
}
/**
* 결재 관련 모든 캐시 무효화
*/
export async function revalidateAllApprovalCaches() {
return revalidateApprovalCache([
'approval-logs',
'pending-actions',
'approval-templates',
]);
}
/**
* 특정 결재 ID의 상세 캐시 무효화
*/
export async function revalidateApprovalDetail(apInfId: string) {
return revalidateApprovalCache([`approval-log-${apInfId}`]);
}
|