From cc2dc9c162ceadfc41f8fa1fcd4c82341c33af7c Mon Sep 17 00:00:00 2001 From: dujinkim Date: Fri, 7 Nov 2025 02:59:13 +0000 Subject: (임수민) 기본계약서 수정하기 리비전 수정, 서명란 바로가기 버튼 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/basic-contract/service.ts | 50 ++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 15 deletions(-) (limited to 'lib/basic-contract/service.ts') diff --git a/lib/basic-contract/service.ts b/lib/basic-contract/service.ts index 8c29dbf2..2fcebd59 100644 --- a/lib/basic-contract/service.ts +++ b/lib/basic-contract/service.ts @@ -400,15 +400,41 @@ export async function updateTemplate({ unstable_noStore(); try { + // 기존 템플릿 조회 (revision 유지 및 중복 체크를 위해) + const existingTemplate = await db.query.basicContractTemplates.findFirst({ + where: eq(basicContractTemplates.id, id), + }); + + if (!existingTemplate) { + return { error: "템플릿을 찾을 수 없습니다." }; + } + // 필수값 const templateName = formData.get("templateName") as string | null; if (!templateName) { return { error: "템플릿 이름은 필수입니다." }; } - // 선택/추가 필드 파싱 - const revisionStr = formData.get("revision")?.toString() ?? "1"; - const revision = Number(revisionStr) || 1; + // revision 처리: FormData에 있으면 사용, 없으면 기존 값 유지 + const revisionStr = formData.get("revision")?.toString(); + const revision = revisionStr ? Number(revisionStr) : existingTemplate.revision; + + // templateName과 revision 조합이 unique이므로, 다른 레코드와 중복되는지 확인 + if (templateName !== existingTemplate.templateName || revision !== existingTemplate.revision) { + const duplicateCheck = await db.query.basicContractTemplates.findFirst({ + where: and( + eq(basicContractTemplates.templateName, templateName), + eq(basicContractTemplates.revision, revision), + ne(basicContractTemplates.id, id) // 자기 자신은 제외 + ), + }); + + if (duplicateCheck) { + return { + error: `템플릿 이름 "${templateName}"과 리비전 ${revision} 조합이 이미 존재합니다. 다른 리비전을 사용하거나 템플릿 이름을 변경해주세요.` + }; + } + } const legalReviewRequired = getBool(formData, "legalReviewRequired", false); @@ -432,13 +458,11 @@ export async function updateTemplate({ if (file) { // 1) 새 파일 저장 (DRM 해제 로직 적용) - - const saveResult = await saveDRMFile( - file, - decryptWithServerAction, - 'basicContract/template' - ); - + const saveResult = await saveDRMFile( + file, + decryptWithServerAction, + 'basicContract/template' + ); if (!saveResult.success) { return { success: false, error: saveResult.error }; @@ -446,11 +470,7 @@ export async function updateTemplate({ fileName = file.name; filePath = saveResult.publicPath; - // 2) 기존 파일 삭제 - const existingTemplate = await db.query.basicContractTemplates.findFirst({ - where: eq(basicContractTemplates.id, id), - }); - + // 2) 기존 파일 삭제 (existingTemplate은 이미 위에서 조회됨) if (existingTemplate?.filePath) { const deleted = await deleteFile(existingTemplate.filePath); if (deleted) { -- cgit v1.2.3