"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 || '문서 생성 실패' } } }