summaryrefslogtreecommitdiff
path: root/app/api/upload/signed-contract/route.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/api/upload/signed-contract/route.ts')
-rw-r--r--app/api/upload/signed-contract/route.ts43
1 files changed, 29 insertions, 14 deletions
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 : "알 수 없는 오류";