From 50adedf48ee4674ebe00f1ee72d93485183cdc51 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Fri, 5 Sep 2025 11:44:32 +0000 Subject: (대표님, 최겸, 임수민) EDP 입력 진행률, 견적목록관리, EDP excel import 오류수정, GTC-Contract MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/basic-contract/service.ts | 88 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) (limited to 'lib/basic-contract/service.ts') diff --git a/lib/basic-contract/service.ts b/lib/basic-contract/service.ts index 8189381b..057526cf 100644 --- a/lib/basic-contract/service.ts +++ b/lib/basic-contract/service.ts @@ -65,7 +65,7 @@ import { sendEmail } from "../mail/sendEmail"; import { headers } from 'next/headers'; import { filterColumns } from "@/lib/filter-columns"; import { differenceInDays, addYears, isBefore } from "date-fns"; -import { deleteFile, saveFile } from "@/lib/file-stroage"; +import { deleteFile, saveBuffer, saveFile } from "@/lib/file-stroage"; import { getServerSession } from "next-auth/next" import { authOptions } from "@/app/api/auth/[...nextauth]/route" @@ -3407,3 +3407,89 @@ export async function updateVendorDocumentStatus( return { success: false, error: "상태 업데이트 중 오류가 발생했습니다." } } } + + +interface SaveDocumentParams { + documentId: number + pdfBuffer: Uint8Array + originalFileName: string + vendor: { + vendorName: string + } + userId: number +} + +export async function saveGtcDocumentAction({ + documentId, + pdfBuffer, + originalFileName, + vendor +}: SaveDocumentParams) { + try { + console.log("📄 GTC 문서 저장 시작:", { + documentId, + vendorName: vendor.vendorName, + originalFileName, + bufferSize: pdfBuffer.length + }) + + const session = await getServerSession(authOptions) + + if (!session?.user) { + return { success: false, error: "인증되지 않은 사용자입니다." } + } + const userId = Number(session.user.id); + + // 1. PDF 파일명 생성 + const baseName = originalFileName.replace(/\.[^/.]+$/, "") // 확장자 제거 + const fileName = `GTC_${vendor.vendorName}_${baseName}_${new Date().toISOString().split('T')[0]}.pdf` + + // 2. 파일 저장 (공용 파일 저장 함수 사용) + const saveResult = await saveBuffer({ + buffer: Buffer.from(pdfBuffer), + fileName, + directory: 'basic-contracts', + originalName: fileName, + userId: userId.toString() + }) + + if (!saveResult.success) { + throw new Error(saveResult.error || '파일 저장 실패') + } + + // 3. 데이터베이스 업데이트 + await db.update(basicContract) + .set({ + fileName: saveResult.fileName!, + filePath: saveResult.publicPath!, + status: 'PENDING', + // 기존 서명 관련 timestamp들 리셋 + vendorSignedAt: null, + buyerSignedAt: null, + legalReviewRequestedAt: null, + legalReviewCompletedAt: null, + updatedAt: new Date() + }) + .where(eq(basicContract.id, documentId)) + + console.log("✅ GTC 문서 저장 완료:", { + fileName: saveResult.fileName, + filePath: saveResult.publicPath, + fileSize: saveResult.fileSize + }) + + return { + success: true, + fileName: saveResult.fileName, + filePath: saveResult.publicPath, + fileSize: saveResult.fileSize + } + + } catch (error) { + console.error("❌ GTC 문서 저장 실패:", error) + return { + success: false, + error: error instanceof Error ? error.message : '문서 저장 중 오류가 발생했습니다' + } + } +} \ No newline at end of file -- cgit v1.2.3