diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-25 07:51:15 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-25 07:51:15 +0000 |
| commit | 2650b7c0bb0ea12b68a58c0439f72d61df04b2f1 (patch) | |
| tree | 17156183fd74b69d78178065388ac61a18ac07b4 /lib/basic-contract | |
| parent | d32acea05915bd6c1ed4b95e56c41ef9204347bc (diff) | |
(대표님) 정기평가 대상, 미들웨어 수정, nextauth 토큰 처리 개선, GTC 등
(최겸) 기술영업
Diffstat (limited to 'lib/basic-contract')
| -rw-r--r-- | lib/basic-contract/service.ts | 16 | ||||
| -rw-r--r-- | lib/basic-contract/template/add-basic-contract-template-dialog.tsx | 30 | ||||
| -rw-r--r-- | lib/basic-contract/validations.ts | 4 |
3 files changed, 34 insertions, 16 deletions
diff --git a/lib/basic-contract/service.ts b/lib/basic-contract/service.ts index 014f32ab..9b5505b5 100644 --- a/lib/basic-contract/service.ts +++ b/lib/basic-contract/service.ts @@ -189,12 +189,12 @@ export async function getBasicContractTemplates( // 템플릿 생성 (서버 액션)
export async function createBasicContractTemplate(input: CreateBasicContractTemplateSchema) {
unstable_noStore();
-
+
try {
const newTemplate = await db.transaction(async (tx) => {
const [row] = await insertBasicContractTemplate(tx, {
templateName: input.templateName,
- revision: 1,
+ revision: input.revision || 1,
legalReviewRequired: input.legalReviewRequired,
shipBuildingApplicable: input.shipBuildingApplicable,
windApplicable: input.windApplicable,
@@ -204,16 +204,18 @@ export async function createBasicContractTemplate(input: CreateBasicContractTemp gyApplicable: input.gyApplicable,
sysApplicable: input.sysApplicable,
infraApplicable: input.infraApplicable,
- status: input.status,
- fileName: input.fileName,
- filePath: input.filePath,
- // 필요하면 createdAt/updatedAt 등도 여기서
+ status: input.status || "ACTIVE",
+
+ // 📝 null 처리 추가
+ fileName: input.fileName || null,
+ filePath: input.filePath || null,
});
return row;
});
-
+
return { data: newTemplate, error: null };
} catch (error) {
+ console.log(error);
return { data: null, error: getErrorMessage(error) };
}
}
diff --git a/lib/basic-contract/template/add-basic-contract-template-dialog.tsx b/lib/basic-contract/template/add-basic-contract-template-dialog.tsx index fd1bd333..6b6ab105 100644 --- a/lib/basic-contract/template/add-basic-contract-template-dialog.tsx +++ b/lib/basic-contract/template/add-basic-contract-template-dialog.tsx @@ -219,16 +219,21 @@ export function AddTemplateDialog() { setIsLoading(true);
try {
let uploadResult = null;
-
+
+ // 📝 파일 업로드가 필요한 경우에만 업로드 진행
if (formData.file) {
const fileId = uuidv4();
uploadResult = await uploadFileInChunks(formData.file, fileId);
-
+
if (!uploadResult?.success) {
throw new Error("파일 업로드에 실패했습니다.");
}
}
-
+
+ // 📝 General GTC이고 파일이 없는 경우와 다른 경우 구분 처리
+ const isGeneralGTC = formData.templateName === "General GTC";
+ const hasFile = uploadResult && uploadResult.success;
+
const saveResponse = await fetch('/api/upload/basicContract/complete', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -245,17 +250,28 @@ export function AddTemplateDialog() { sysApplicable: formData.sysApplicable,
infraApplicable: formData.infraApplicable,
status: "ACTIVE",
- fileName: uploadResult?.fileName || `${formData.templateName}_v1.docx`,
- filePath: uploadResult?.filePath || "",
+
+ // 📝 파일이 있는 경우에만 fileName과 filePath 전송
+ ...(hasFile && {
+ fileName: uploadResult.fileName,
+ filePath: uploadResult.filePath,
+ }),
+
+ // 📝 파일이 없는 경우 null 전송 (스키마가 nullable이어야 함)
+ ...(!hasFile && {
+ fileName: null,
+ filePath: null,
+ })
}),
next: { tags: ["basic-contract-templates"] },
});
-
+
const saveResult = await saveResponse.json();
if (!saveResult.success) {
+ console.log(saveResult.error);
throw new Error(saveResult.error || "템플릿 정보 저장에 실패했습니다.");
}
-
+
toast.success('템플릿이 성공적으로 추가되었습니다.');
form.reset();
setSelectedFile(null);
diff --git a/lib/basic-contract/validations.ts b/lib/basic-contract/validations.ts index 39248b4a..e8b28e73 100644 --- a/lib/basic-contract/validations.ts +++ b/lib/basic-contract/validations.ts @@ -76,8 +76,8 @@ export const createBasicContractTemplateSchema = z.object({ infraApplicable: z.boolean().default(false),
status: z.enum(["ACTIVE", "DISPOSED"]).default("ACTIVE"),
- fileName: z.string().min(1),
- filePath: z.string().min(1),
+ fileName: z.string().nullable().optional(),
+ filePath: z.string().nullable().optional(),
// 기존에 쓰시던 validityPeriod 를 계속 쓰실 거라면 남기고, 아니라면 지우세요.
// 예: 문자열(YYYY-MM-DD ~ YYYY-MM-DD) 또는 number(개월 수) 등 구체화 필요
|
