summaryrefslogtreecommitdiff
path: root/lib/vendors
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendors')
-rw-r--r--lib/vendors/service.ts42
-rw-r--r--lib/vendors/table/vendor-all-export.ts10
2 files changed, 29 insertions, 23 deletions
diff --git a/lib/vendors/service.ts b/lib/vendors/service.ts
index a22a1551..22d58ae1 100644
--- a/lib/vendors/service.ts
+++ b/lib/vendors/service.ts
@@ -6,8 +6,6 @@ import { vendorAttachments, VendorContact, vendorContacts, vendorDetailView, ven
import logger from '@/lib/logger';
import * as z from "zod"
import crypto from 'crypto';
-import fs from 'fs/promises';
-import path from 'path';
import { v4 as uuidv4 } from 'uuid';
import { saveDRMFile } from "@/lib/file-stroage";
import { decryptWithServerAction } from "@/components/drm/drmUtils";
@@ -58,7 +56,7 @@ import { mfaTokens, roles, userRoles, users } from "@/db/schema/users";
import { getServerSession } from "next-auth";
import { authOptions } from "@/app/api/auth/[...nextauth]/route";
import { contractsDetailView, projects, vendorPQSubmissions, vendorsLogs } from "@/db/schema";
-import { deleteFile, saveFile } from "../file-stroage";
+import { deleteFile, saveFile, saveBuffer } from "../file-stroage";
import { basicContractTemplates } from "@/db/schema/basicContractDocumnet";
import { basicContract } from "@/db/schema/basicContractDocumnet";
import { headers } from 'next/headers';
@@ -2868,14 +2866,8 @@ export async function requestBasicContractInfo({
try {
const fileId = uuidv4();
const fileName = `${fileId}.pdf`;
- const relativePath = `/basicContract/${fileName}`;
- const publicDir = path.join(process.cwd(), "public", "basicContract");
- const absolutePath = path.join(publicDir, fileName);
- // 디렉토리 생성
- await fs.mkdir(publicDir, { recursive: true });
-
- // PDF 파일 저장 (다양한 타입을 Buffer로 변환)
+ // PDF 버퍼를 Buffer로 변환 (saveBuffer 함수가 Buffer 메서드를 사용하므로)
let bufferData: Buffer;
if (Buffer.isBuffer(pdfBuffer)) {
bufferData = pdfBuffer;
@@ -2886,12 +2878,29 @@ export async function requestBasicContractInfo({
} else {
bufferData = Buffer.from(pdfBuffer as any);
}
- await fs.writeFile(absolutePath, bufferData);
+
+ // saveBuffer 함수를 사용해서 파일 저장 (환경별 경로 처리는 자동으로 됨)
+ const saveResult = await saveBuffer({
+ buffer: bufferData,
+ fileName: fileName,
+ directory: "basicContract",
+ originalName: `${template.templateName || 'contract'}_${fileId}.pdf`,
+ userId: requestedBy.toString()
+ });
+
+ if (!saveResult.success) {
+ throw new Error(saveResult.error || '파일 저장에 실패했습니다.');
+ }
- finalFileName = fileName;
- finalFilePath = relativePath;
+ finalFileName = saveResult.fileName || fileName;
+ // publicPath에서 /api/files/ 부분을 제거하여 데이터베이스에 저장
+ // 이렇게 하면 /api/files/ API를 통해 접근할 때 올바른 경로가 됨
+ finalFilePath = saveResult.publicPath
+ ? saveResult.publicPath.replace('/api/files/', '')
+ : `/basicContract/${fileName}`;
- console.log(`✅ PDF 파일 저장 완료: ${absolutePath}`);
+ console.log(`✅ PDF 파일 저장 완료: ${saveResult.filePath}`);
+ console.log(`📄 접근 경로: ${finalFilePath}`);
} catch (pdfSaveError) {
console.error('PDF 파일 저장 오류:', pdfSaveError);
return { error: `PDF 파일 저장 실패: ${pdfSaveError instanceof Error ? pdfSaveError.message : '알 수 없는 오류'}` };
@@ -2917,6 +2926,10 @@ export async function requestBasicContractInfo({
try {
// 3-1. basic_contract 테이블에 레코드 추가
+ // 마감일은 생성일로부터 10일 후로 설정
+ const deadline = new Date();
+ deadline.setDate(deadline.getDate() + 10);
+
const [newContract] = await db
.insert(basicContract)
.values({
@@ -2926,6 +2939,7 @@ export async function requestBasicContractInfo({
status: "PENDING",
fileName: finalFileName, // PDF 변환된 파일 이름 사용
filePath: finalFilePath, // PDF 변환된 파일 경로 사용
+ deadline: deadline.toISOString().split('T')[0], // YYYY-MM-DD 형식으로 변환
})
.returning();
diff --git a/lib/vendors/table/vendor-all-export.ts b/lib/vendors/table/vendor-all-export.ts
index 31ab2b52..1784ae9b 100644
--- a/lib/vendors/table/vendor-all-export.ts
+++ b/lib/vendors/table/vendor-all-export.ts
@@ -2,6 +2,7 @@
import ExcelJS from "exceljs"
import { VendorWithType } from "@/db/schema/vendors"
import { exportVendorDetails } from "../service";
+import { formatDate } from "@/lib/utils";
// 연락처 인터페이스 정의
interface VendorContact {
@@ -451,15 +452,6 @@ function applyHeaderStyle(sheet: ExcelJS.Worksheet): void {
});
}
-// 날짜 포맷 함수
-function formatDate(date: Date | string): string {
- if (!date) return "";
- if (typeof date === 'string') {
- date = new Date(date);
- }
- return date.toISOString().split('T')[0];
-}
-
// 금액 포맷 함수
function formatAmount(amount: number): string {
return amount.toLocaleString();