From 6f340990e97656d49274b0492d15cbd630a4dfad Mon Sep 17 00:00:00 2001 From: Vishnu Date: Wed, 21 May 2025 19:12:07 +0530 Subject: [PATCH] setup1 --- apps/Backend/package.json | 5 ++++ apps/Backend/src/routes/index.ts | 2 ++ apps/Backend/src/routes/pdfExtraction.ts | 23 +++++++++++++++++ apps/Backend/src/services/pythonClient.ts | 30 +++++++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 apps/Backend/src/routes/pdfExtraction.ts create mode 100644 apps/Backend/src/services/pythonClient.ts diff --git a/apps/Backend/package.json b/apps/Backend/package.json index 5f89e61..94ee1f2 100644 --- a/apps/Backend/package.json +++ b/apps/Backend/package.json @@ -13,12 +13,15 @@ "license": "ISC", "type": "commonjs", "dependencies": { + "axios": "^1.9.0", "bcrypt": "^5.1.1", "cors": "^2.8.5", "dotenv": "^16.0.3", "express": "^4.21.2", "express-session": "^1.18.1", + "form-data": "^4.0.2", "jsonwebtoken": "^9.0.2", + "multer": "^2.0.0", "passport": "^0.7.0", "passport-local": "^1.0.0", "ws": "^8.18.0", @@ -30,7 +33,9 @@ "@types/cors": "^2.8.18", "@types/express": "^5.0.1", "@types/express-session": "^1.18.0", + "@types/form-data": "^2.2.1", "@types/jsonwebtoken": "^9.0.9", + "@types/multer": "^1.4.12", "@types/node": "20.16.11", "@types/passport": "^1.0.16", "@types/passport-local": "^1.0.38", diff --git a/apps/Backend/src/routes/index.ts b/apps/Backend/src/routes/index.ts index f306927..f322ce1 100644 --- a/apps/Backend/src/routes/index.ts +++ b/apps/Backend/src/routes/index.ts @@ -3,6 +3,7 @@ import patientRoutes from './patients'; import appointmentRoutes from './appointements' import userRoutes from './users' import staffRoutes from './staffs' +import pdfExtractionRoutes from './pdfExtraction'; const router = Router(); @@ -10,5 +11,6 @@ router.use('/patients', patientRoutes); router.use('/appointments', appointmentRoutes); router.use('/users', userRoutes); router.use('/staffs', staffRoutes); +router.use('/pdfExtraction/', pdfExtractionRoutes); export default router; \ No newline at end of file diff --git a/apps/Backend/src/routes/pdfExtraction.ts b/apps/Backend/src/routes/pdfExtraction.ts new file mode 100644 index 0000000..1173f81 --- /dev/null +++ b/apps/Backend/src/routes/pdfExtraction.ts @@ -0,0 +1,23 @@ +import { Router } from "express"; +import type { Request, Response } from "express"; +const router = Router(); +import multer from "multer"; +import forwardToPythonService from "../services/pythonClient"; + +const upload = multer({ storage: multer.memoryStorage() }); + +router.post("/extract", upload.single("pdf"), async (req: Request, res: Response): Promise=> { + if (!req.file) { + return res.status(400).json({ error: "No PDF file uploaded." }); + } + + try { + const result = await forwardToPythonService(req.file); + res.json(result); + } catch (err) { + console.error(err); + res.status(500).json({ error: "Extraction failed" }); + } +}); + +export default router; diff --git a/apps/Backend/src/services/pythonClient.ts b/apps/Backend/src/services/pythonClient.ts new file mode 100644 index 0000000..5e279ef --- /dev/null +++ b/apps/Backend/src/services/pythonClient.ts @@ -0,0 +1,30 @@ +import axios from "axios"; +import FormData from "form-data"; +import { Express } from "express"; + +export interface ExtractedData { + name?: string; + memberId?: string; + dob?: string; + [key: string]: any; // In case your extraction returns additional dynamic fields +} + +export default async function forwardToPythonService( + file: Express.Multer.File +): Promise { + const form = new FormData(); + form.append("pdf", file.buffer, { + filename: file.originalname, + contentType: file.mimetype, + }); + + const response = await axios.post( + "http://localhost:5001/extract", + form, + { + headers: form.getHeaders(), + } + ); + + return response.data; +}