summaryrefslogtreecommitdiff
path: root/lib/basic-contract
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-15 14:41:01 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-15 14:41:01 +0000
commit4ee8b24cfadf47452807fa2af801385ed60ab47c (patch)
treee1d1fb029f0cf5519c517494bf9a545505c35700 /lib/basic-contract
parent265859d691a01cdcaaf9154f93c38765bc34df06 (diff)
(대표님) 작업사항 - rfqLast, tbeLast, pdfTron, userAuth
Diffstat (limited to 'lib/basic-contract')
-rw-r--r--lib/basic-contract/gen-service.ts33
-rw-r--r--lib/basic-contract/viewer/basic-contract-sign-viewer.tsx1
2 files changed, 20 insertions, 14 deletions
diff --git a/lib/basic-contract/gen-service.ts b/lib/basic-contract/gen-service.ts
index 5619f98e..aa9efbc1 100644
--- a/lib/basic-contract/gen-service.ts
+++ b/lib/basic-contract/gen-service.ts
@@ -8,6 +8,7 @@ import { eq, and, ilike } from "drizzle-orm";
import { addDays } from "date-fns";
import { writeFile, mkdir } from "fs/promises";
import path from "path";
+import { saveBuffer } from '@/lib/file-storage'; // 추가
interface BasicContractParams {
templateName: string;
@@ -348,17 +349,19 @@ export async function saveContractPdf({
templateId: number;
}) {
try {
- // 1. PDF 파일 저장
- const outputDir = path.join(process.cwd(), process.env.NAS_PATH, "contracts", "generated");
- await mkdir(outputDir, { recursive: true });
+ // 1. PDF 파일 저장 (공용 saveBuffer 사용)
+ const saveResult = await saveBuffer({
+ buffer: Buffer.from(pdfBuffer),
+ fileName: fileName, // 원본 파일명 (확장자 포함)
+ directory: 'contracts/generated',
+ originalName: fileName, // DB에 저장할 원본명
+ userId: params.requestedBy // 요청자 ID를 userId로 사용
+ });
- const timestamp = Date.now();
- const finalFileName = `${fileName.replace('.pdf', '')}_${timestamp}.pdf`;
- const outputPath = path.join(outputDir, finalFileName);
-
- await writeFile(outputPath, Buffer.from(pdfBuffer));
-
- const relativePath = `/contracts/generated/${finalFileName}`;
+ // 저장 실패 시 에러 처리
+ if (!saveResult.success) {
+ throw new Error(saveResult.error || 'PDF 파일 저장에 실패했습니다.');
+ }
// 2. DB에 계약서 레코드 생성
const [newContract] = await db
@@ -371,8 +374,8 @@ export async function saveContractPdf({
generalContractId: params.generalContractId,
requestedBy: params.requestedBy,
status: "PENDING",
- fileName: finalFileName,
- filePath: relativePath,
+ fileName: saveResult.originalName || fileName, // 원본 파일명
+ filePath: saveResult.publicPath, // 웹 접근 가능한 경로
deadline: addDays(new Date(), 10),
createdAt: new Date(),
updatedAt: new Date(),
@@ -385,8 +388,10 @@ export async function saveContractPdf({
templateName: params.templateName,
status: newContract.status,
deadline: newContract.deadline,
- pdfPath: relativePath,
- pdfFileName: finalFileName
+ pdfPath: saveResult.publicPath, // 공용 함수가 반환한 경로
+ pdfFileName: saveResult.originalName || fileName, // 원본 파일명
+ hashedFileName: saveResult.fileName, // 실제 저장된 해시 파일명 (필요시 사용)
+ securityChecks: saveResult.securityChecks // 보안 검증 결과 (디버깅용)
};
} catch (error) {
console.error("PDF 저장 실패:", error);
diff --git a/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx b/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
index e52f0d79..5698428e 100644
--- a/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
+++ b/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
@@ -594,6 +594,7 @@ export function BasicContractSignViewer({
isComplete: false
});
+ console.log(filePath, "filePath")
console.log(surveyTemplate, "surveyTemplate")
const conditionalHandler = useConditionalSurvey(surveyTemplate);