diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-05 11:44:32 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-05 11:44:32 +0000 |
| commit | 50adedf48ee4674ebe00f1ee72d93485183cdc51 (patch) | |
| tree | 18053ab04d94c750028eee5d5d2f16ba4f38f50e /lib/basic-contract/service.ts | |
| parent | 66d64b482f2b6b52b0dd396ef998f27d491c70dd (diff) | |
(대표님, 최겸, 임수민) EDP 입력 진행률, 견적목록관리, EDP excel import 오류수정, GTC-Contract
Diffstat (limited to 'lib/basic-contract/service.ts')
| -rw-r--r-- | lib/basic-contract/service.ts | 88 |
1 files changed, 87 insertions, 1 deletions
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 |
