diff options
Diffstat (limited to 'lib/basic-contract/service.ts')
| -rw-r--r-- | lib/basic-contract/service.ts | 50 |
1 files changed, 35 insertions, 15 deletions
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) {
|
