summaryrefslogtreecommitdiff
path: root/lib/bidding
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bidding')
-rw-r--r--lib/bidding/pre-quote/service.ts49
1 files changed, 24 insertions, 25 deletions
diff --git a/lib/bidding/pre-quote/service.ts b/lib/bidding/pre-quote/service.ts
index 680a8ff5..7f054a66 100644
--- a/lib/bidding/pre-quote/service.ts
+++ b/lib/bidding/pre-quote/service.ts
@@ -11,7 +11,7 @@ import { mkdir, writeFile } from 'fs/promises'
import path from 'path'
import { revalidateTag, revalidatePath } from 'next/cache'
import { basicContract } from '@/db/schema/basicContractDocumnet'
-import { saveFile } from '@/lib/file-stroage'
+import { saveFile ,saveBuffer} from '@/lib/file-stroage'
// userId를 user.name으로 변환하는 유틸리티 함수
async function getUserNameById(userId: string): Promise<string> {
@@ -1225,10 +1225,7 @@ export async function sendBiddingBasicContracts(
const results = []
const savedContracts = []
- // 트랜잭션 시작
- const contractsDir = path.join(process.cwd(), `${process.env.NAS_PATH}`, "contracts", "generated");
- await mkdir(contractsDir, { recursive: true });
-
+ // 트랜잭션 시작 - contractsDir 제거 (saveBuffer가 처리)
const result = await db.transaction(async (tx) => {
// 각 벤더별로 기본계약 생성 및 이메일 발송
for (const vendor of vendorData) {
@@ -1288,6 +1285,7 @@ export async function sendBiddingBasicContracts(
if (vendor.contractRequirements.projectGtcYn) contractTypes.push({ type: 'Project_GTC', templateName: '기술' })
if (vendor.contractRequirements.agreementYn) contractTypes.push({ type: '기술자료', templateName: '기술자료' })
console.log("contractTypes", contractTypes)
+
for (const contractType of contractTypes) {
// PDF 데이터 찾기 (include를 사용하여 유연하게 찾기)
console.log("generatedPdfs", generatedPdfs.map(pdf => pdf.key))
@@ -1301,11 +1299,22 @@ export async function sendBiddingBasicContracts(
continue
}
- // 파일 저장 (rfq-last 방식)
+ // 파일 저장 - saveBuffer 사용
const fileName = `${contractType.type}_${vendor.vendorCode || vendor.vendorId}_${vendor.biddingCompanyId}_${Date.now()}.pdf`
- const filePath = path.join(contractsDir, fileName);
+
+ const saveResult = await saveBuffer({
+ buffer: Buffer.from(pdfData.buffer),
+ fileName: fileName,
+ directory: 'contracts/generated',
+ originalName: fileName,
+ userId: currentUser.id
+ })
- await writeFile(filePath, Buffer.from(pdfData.buffer));
+ // 저장 실패 시 처리
+ if (!saveResult.success) {
+ console.error(`PDF 저장 실패: ${saveResult.error}`)
+ continue
+ }
// 템플릿 정보 조회 (rfq-last 방식)
const [template] = await db
@@ -1343,8 +1352,8 @@ export async function sendBiddingBasicContracts(
.set({
requestedBy: currentUser.id,
status: "PENDING", // 재발송 상태
- fileName: fileName,
- filePath: `/contracts/generated/${fileName}`,
+ fileName: saveResult.originalName || fileName, // 원본 파일명
+ filePath: saveResult.publicPath, // saveBuffer가 반환한 공개 경로
deadline: new Date(Date.now() + 10 * 24 * 60 * 60 * 1000),
updatedAt: new Date(),
})
@@ -1364,8 +1373,8 @@ export async function sendBiddingBasicContracts(
generalContractId: null,
requestedBy: currentUser.id,
status: 'PENDING',
- fileName: fileName,
- filePath: `/contracts/generated/${fileName}`,
+ fileName: saveResult.originalName || fileName, // 원본 파일명
+ filePath: saveResult.publicPath, // saveBuffer가 반환한 공개 경로
deadline: new Date(Date.now() + 10 * 24 * 60 * 60 * 1000), // 10일 후
createdAt: new Date(),
updatedAt: new Date(),
@@ -1380,19 +1389,10 @@ export async function sendBiddingBasicContracts(
vendorName: vendor.vendorName,
contractId: contractRecord.id,
contractType: contractType.type,
- fileName: fileName,
- filePath: `/contracts/generated/${fileName}`,
+ fileName: saveResult.originalName || fileName,
+ filePath: saveResult.publicPath,
+ hashedFileName: saveResult.fileName, // 실제 저장된 파일명 (디버깅용)
})
-
- // savedContracts에 추가 (rfq-last 방식)
- // savedContracts.push({
- // vendorId: vendor.vendorId,
- // vendorName: vendor.vendorName,
- // templateName: contractType.templateName,
- // contractId: contractRecord.id,
- // fileName: fileName,
- // isUpdated: !!existingContract, // 업데이트 여부 표시
- // })
}
// 이메일 발송 (선택사항)
@@ -1439,7 +1439,6 @@ export async function sendBiddingBasicContracts(
)
}
}
-
// 기존 기본계약 조회 (서버 액션)
export async function getExistingBasicContractsForBidding(biddingId: number) {
try {