/** * 일반계약 PDF 업로드 API * 클라이언트에서 생성된 PDF를 서버에 저장 */ import { NextRequest, NextResponse } from 'next/server'; import { getServerSession } from 'next-auth/next'; import { authOptions } from '@/app/api/auth/[...nextauth]/route'; import { saveBuffer } from '@/lib/file-stroage'; export async function POST(request: NextRequest) { try { const session = await getServerSession(authOptions); if (!session?.user?.id) { return NextResponse.json( { success: false, error: '인증이 필요합니다' }, { status: 401 } ); } const formData = await request.formData(); const file = formData.get('file') as File; const contractId = formData.get('contractId') as string; if (!file) { return NextResponse.json( { success: false, error: '파일이 제공되지 않았습니다' }, { status: 400 } ); } // 파일을 ArrayBuffer로 읽기 const arrayBuffer = await file.arrayBuffer(); const buffer = Buffer.from(arrayBuffer); // saveBuffer 함수를 사용해서 파일 저장 const saveResult = await saveBuffer({ buffer: buffer, fileName: `${Date.now()}_${file.name}`, directory: "generalContracts", originalName: file.name, userId: session.user.id }); if (!saveResult.success) { return NextResponse.json( { success: false, error: saveResult.error || 'PDF 파일 저장에 실패했습니다.' }, { status: 500 } ); } const finalFilePath = saveResult.publicPath ? saveResult.publicPath.replace('/api/files/', '') : `/generalContracts/${saveResult.fileName}`; return NextResponse.json({ success: true, filePath: finalFilePath, fileName: saveResult.fileName, publicPath: saveResult.publicPath, }); } catch (error) { console.error('PDF 업로드 오류:', error); return NextResponse.json( { success: false, error: error instanceof Error ? error.message : 'PDF 업로드 중 오류가 발생했습니다.' }, { status: 500 } ); } }