summaryrefslogtreecommitdiff
path: root/lib/basic-contract/actions.ts
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-17 05:39:58 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-17 05:39:58 +0000
commitc54e2acaed641b7ae2c1a7304b08626f9ca973db (patch)
tree3f4dc361fc6267e2fb50d8488f40d4bbe4efd5e2 /lib/basic-contract/actions.ts
parent6c11fccc84f4c84fa72ee01f9caad9f76f35cea2 (diff)
(임수민) 기본계약 폐기하기, 수정하기 수정
Diffstat (limited to 'lib/basic-contract/actions.ts')
-rw-r--r--lib/basic-contract/actions.ts135
1 files changed, 135 insertions, 0 deletions
diff --git a/lib/basic-contract/actions.ts b/lib/basic-contract/actions.ts
new file mode 100644
index 00000000..0af9b948
--- /dev/null
+++ b/lib/basic-contract/actions.ts
@@ -0,0 +1,135 @@
+"use server"
+
+import { revalidateTag, revalidatePath } from 'next/cache'
+import db from '@/db/db'
+import { basicContractTemplates } from '@/db/schema'
+import { eq, inArray } from 'drizzle-orm'
+
+export async function disposeDocuments(documentIds: number[]) {
+ try {
+ if (!documentIds || !Array.isArray(documentIds) || documentIds.length === 0) {
+ throw new Error('폐기할 문서 ID가 필요합니다.')
+ }
+
+ // 문서들을 DISPOSED 상태로 업데이트하고 폐기일시 설정
+ await db
+ .update(basicContractTemplates)
+ .set({
+ status: 'DISPOSED',
+ disposedAt: new Date(),
+ updatedAt: new Date(),
+ })
+ .where(inArray(basicContractTemplates.id, documentIds))
+
+ // 캐시 무효화
+ revalidateTag('basic-contract-templates')
+ revalidatePath('/evcp/basic-contract-template')
+
+ return {
+ success: true,
+ message: `${documentIds.length}개의 문서가 폐기되었습니다.`,
+ disposedCount: documentIds.length
+ }
+
+ } catch (error) {
+ console.error('문서 폐기 처리 오류:', error)
+ throw new Error('문서 폐기 처리 중 오류가 발생했습니다.')
+ }
+}
+
+export async function restoreDocuments(documentIds: number[]) {
+ try {
+ if (!documentIds || !Array.isArray(documentIds) || documentIds.length === 0) {
+ throw new Error('복구할 문서 ID가 필요합니다.')
+ }
+
+ // 문서들을 ACTIVE 상태로 업데이트하고 폐기일시 제거
+ await db
+ .update(basicContractTemplates)
+ .set({
+ status: 'ACTIVE',
+ disposedAt: null,
+ updatedAt: new Date(),
+ })
+ .where(inArray(basicContractTemplates.id, documentIds))
+
+ // 캐시 무효화
+ revalidateTag('basic-contract-templates')
+ revalidatePath('/evcp/basic-contract-template')
+
+ return {
+ success: true,
+ message: `${documentIds.length}개의 문서가 복구되었습니다.`,
+ restoredCount: documentIds.length
+ }
+
+ } catch (error) {
+ console.error('문서 복구 처리 오류:', error)
+ throw new Error('문서 복구 처리 중 오류가 발생했습니다.')
+ }
+}
+
+export async function createDocumentRevisionAction(input: {
+ baseDocumentId: number;
+ contractTemplateName: string;
+ contractTemplateType: string;
+ revision: number;
+ legalReviewRequired: boolean;
+ fileName: string;
+ filePath: string;
+}) {
+ try {
+ const { createBasicContractTemplateRevision } = await import('./service');
+
+ const { data, error } = await createBasicContractTemplateRevision({
+ ...input,
+ status: 'ACTIVE' as const
+ });
+
+ if (error) {
+ throw new Error(error);
+ }
+
+ return {
+ success: true,
+ data,
+ message: `${input.contractTemplateName} v${input.revision} 리비전이 성공적으로 생성되었습니다.`
+ };
+
+ } catch (error) {
+ console.error('문서 리비전 생성 오류:', error);
+ throw new Error(error instanceof Error ? error.message : '문서 리비전 생성 중 오류가 발생했습니다.');
+ }
+}
+
+// 업로드 완료 후 문서 생성 (클라이언트에서 직접 호출 가능한 서버 액션)
+export async function createDocumentFromUpload(input: {
+ contractTemplateType: string
+ contractTemplateName: string
+ legalReviewRequired: boolean
+ fileName: string
+ filePath: string
+}) {
+ try {
+ const { createBasicContractTemplate } = await import('./service');
+
+ const { data, error } = await createBasicContractTemplate({
+ contractTemplateType: input.contractTemplateType,
+ contractTemplateName: input.contractTemplateName,
+ revision: 1,
+ status: 'ACTIVE',
+ legalReviewRequired: input.legalReviewRequired,
+ fileName: input.fileName,
+ filePath: input.filePath,
+ } as any)
+
+ if (error) throw new Error(error)
+
+ revalidateTag('basic-contract-templates')
+ revalidatePath('/evcp/basic-contract-template')
+
+ return { success: true, id: data?.id }
+ } catch (e: any) {
+ return { success: false, error: e?.message || '문서 생성 실패' }
+ }
+}