diff options
Diffstat (limited to 'app/api')
| -rw-r--r-- | app/api/general-contracts/upload-pdf/route.ts | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/app/api/general-contracts/upload-pdf/route.ts b/app/api/general-contracts/upload-pdf/route.ts new file mode 100644 index 00000000..9480f7f5 --- /dev/null +++ b/app/api/general-contracts/upload-pdf/route.ts @@ -0,0 +1,73 @@ +/** + * 일반계약 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 } + ); + } +} + |
