From 51c8803dc6ac710aa8e60f875f4cb63d32a33f0f Mon Sep 17 00:00:00 2001 From: TARIFUDDIN Date: Fri, 21 Feb 2025 22:05:43 +0530 Subject: [PATCH] last commit --- app/api/inngest/resume/extract/route.js | 65 +++++++++++++++++++------ package-lock.json | 1 + package.json | 2 +- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/app/api/inngest/resume/extract/route.js b/app/api/inngest/resume/extract/route.js index 200bd1d..1c91190 100644 --- a/app/api/inngest/resume/extract/route.js +++ b/app/api/inngest/resume/extract/route.js @@ -1,12 +1,13 @@ - import { NextResponse } from 'next/server'; -import { createReadStream } from 'fs'; import pdfParse from 'pdf-parse'; import mammoth from 'mammoth'; import fs from 'fs/promises'; import path from 'path'; +import os from 'os'; export async function POST(request) { + let tempFilePath = null; + try { const data = await request.formData(); const file = data.get('file'); @@ -15,32 +16,64 @@ export async function POST(request) { return NextResponse.json({ error: 'No file provided' }, { status: 400 }); } - // Save file temporarily + // Get file type + const fileType = file.name.split('.').pop().toLowerCase(); + if (!['pdf', 'docx'].includes(fileType)) { + return NextResponse.json({ error: `Unsupported file format: ${fileType}` }, { status: 400 }); + } + + // Convert file to buffer const bytes = await file.arrayBuffer(); const buffer = Buffer.from(bytes); - const tempFilePath = path.join('/tmp', file.name); - await fs.writeFile(tempFilePath, buffer); // Extract text based on file type let extractedText = ''; - const fileType = file.name.split('.').pop().toLowerCase(); if (fileType === 'pdf') { - const pdfData = await pdfParse(buffer); - extractedText = pdfData.text; + try { + const pdfData = await pdfParse(buffer); + extractedText = pdfData.text; + } catch (pdfError) { + console.error('PDF parsing error:', pdfError); + return NextResponse.json({ + error: 'Failed to parse PDF', + details: pdfError.message + }, { status: 422 }); + } } else if (fileType === 'docx') { - const result = await mammoth.extractRawText({ path: tempFilePath }); - extractedText = result.value; - } else { - return NextResponse.json({ error: 'Unsupported file format' }, { status: 400 }); + // Save file temporarily using os.tmpdir() for cross-platform compatibility + tempFilePath = path.join(os.tmpdir(), `tmp-${Date.now()}-${file.name}`); + await fs.writeFile(tempFilePath, buffer); + + try { + const result = await mammoth.extractRawText({ path: tempFilePath }); + extractedText = result.value; + } catch (docxError) { + console.error('DOCX parsing error:', docxError); + return NextResponse.json({ + error: 'Failed to parse DOCX', + details: docxError.message + }, { status: 422 }); + } } - // Delete temp file - await fs.unlink(tempFilePath); - return NextResponse.json({ text: extractedText }); + } catch (error) { console.error('Error extracting text:', error); - return NextResponse.json({ error: 'Failed to extract text' }, { status: 500 }); + return NextResponse.json({ + error: 'Failed to extract text', + details: error.message, + code: error.code + }, { status: 500 }); + } finally { + // Clean up temp file if it exists + if (tempFilePath) { + try { + await fs.unlink(tempFilePath); + } catch (cleanupError) { + console.error('Failed to clean up temp file:', cleanupError); + } + } } } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ca668cf..0ddd9f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "futurebuild", "version": "0.1.0", + "hasInstallScript": true, "dependencies": { "@clerk/nextjs": "^6.11.3", "@clerk/themes": "^2.2.18", diff --git a/package.json b/package.json index 115aa7b..f7f2f19 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "build": "next build", "start": "next start", "lint": "next lint", - "postinstall":"prisma generate" + "postinstall": "prisma generate" }, "dependencies": { "@clerk/nextjs": "^6.11.3",