From 4ee8b24cfadf47452807fa2af801385ed60ab47c Mon Sep 17 00:00:00 2001 From: dujinkim Date: Mon, 15 Sep 2025 14:41:01 +0000 Subject: (대표님) 작업사항 - rfqLast, tbeLast, pdfTron, userAuth MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/upload/signed-contract/route.ts | 43 ++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'app/api/upload') diff --git a/app/api/upload/signed-contract/route.ts b/app/api/upload/signed-contract/route.ts index 86109eec..8547f0e4 100644 --- a/app/api/upload/signed-contract/route.ts +++ b/app/api/upload/signed-contract/route.ts @@ -1,12 +1,10 @@ // app/api/upload/signed-contract/route.ts import { NextRequest, NextResponse } from 'next/server'; -import fs from 'fs/promises'; -import path from 'path'; -import { v4 as uuidv4 } from 'uuid'; import db from "@/db/db"; import { basicContract } from '@/db/schema'; import { eq } from 'drizzle-orm'; import { revalidateTag } from 'next/cache'; +import { saveBuffer } from '@/lib/file-stroage'; export async function POST(request: NextRequest) { try { @@ -19,25 +17,37 @@ export async function POST(request: NextRequest) { return NextResponse.json({ result: false, error: '필수 파라미터가 누락되었습니다.' }, { status: 400 }); } - const originalName = `${tableRowId}_${templateName}`; - const ext = path.extname(originalName); - const uniqueName = uuidv4() + ext; + // 원본 파일명 설정 + const originalFileName = `${tableRowId}_${templateName}`; - const publicDir = path.join(process.cwd(), "public", "basicContract"); - const relativePath = `/basicContract/signed/${uniqueName}`; - const absolutePath = path.join(publicDir, uniqueName); + // 파일을 Buffer로 변환 const buffer = Buffer.from(await file.arrayBuffer()); - await fs.mkdir(publicDir, { recursive: true }); - await fs.writeFile(absolutePath, buffer); + // saveBuffer 함수를 사용하여 파일 저장 + const saveResult = await saveBuffer({ + buffer: buffer, + fileName: file.name, // 실제 업로드된 파일명 + directory: 'basicContract/signed', // 저장 디렉토리 + originalName: originalFileName, // DB에 저장할 원본명 + userId: undefined // 필요시 사용자 ID 추가 + }); + + // 저장 실패 시 에러 반환 + if (!saveResult.success) { + return NextResponse.json({ + result: false, + error: saveResult.error || '파일 저장에 실패했습니다.' + }, { status: 500 }); + } + // DB 업데이트 await db.transaction(async (tx) => { await tx .update(basicContract) .set({ status: "VENDOR_SIGNED", - fileName: originalName, - filePath: relativePath, + fileName: saveResult.originalName || originalFileName, // 원본 파일명 + filePath: saveResult.publicPath, // 웹 접근 가능한 경로 updatedAt: new Date(), completedAt: new Date() }) @@ -48,7 +58,12 @@ export async function POST(request: NextRequest) { revalidateTag("basic-contract-requests"); revalidateTag("basicContractView-vendor"); - return NextResponse.json({ result: true }); + return NextResponse.json({ + result: true, + filePath: saveResult.publicPath, + fileName: saveResult.fileName + }); + } catch (error) { console.error('서명된 계약서 저장 오류:', error); const errorMessage = error instanceof Error ? error.message : "알 수 없는 오류"; -- cgit v1.2.3