setup1
This commit is contained in:
@@ -13,12 +13,15 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"axios": "^1.9.0",
|
||||||
"bcrypt": "^5.1.1",
|
"bcrypt": "^5.1.1",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"express": "^4.21.2",
|
"express": "^4.21.2",
|
||||||
"express-session": "^1.18.1",
|
"express-session": "^1.18.1",
|
||||||
|
"form-data": "^4.0.2",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
|
"multer": "^2.0.0",
|
||||||
"passport": "^0.7.0",
|
"passport": "^0.7.0",
|
||||||
"passport-local": "^1.0.0",
|
"passport-local": "^1.0.0",
|
||||||
"ws": "^8.18.0",
|
"ws": "^8.18.0",
|
||||||
@@ -30,7 +33,9 @@
|
|||||||
"@types/cors": "^2.8.18",
|
"@types/cors": "^2.8.18",
|
||||||
"@types/express": "^5.0.1",
|
"@types/express": "^5.0.1",
|
||||||
"@types/express-session": "^1.18.0",
|
"@types/express-session": "^1.18.0",
|
||||||
|
"@types/form-data": "^2.2.1",
|
||||||
"@types/jsonwebtoken": "^9.0.9",
|
"@types/jsonwebtoken": "^9.0.9",
|
||||||
|
"@types/multer": "^1.4.12",
|
||||||
"@types/node": "20.16.11",
|
"@types/node": "20.16.11",
|
||||||
"@types/passport": "^1.0.16",
|
"@types/passport": "^1.0.16",
|
||||||
"@types/passport-local": "^1.0.38",
|
"@types/passport-local": "^1.0.38",
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import patientRoutes from './patients';
|
|||||||
import appointmentRoutes from './appointements'
|
import appointmentRoutes from './appointements'
|
||||||
import userRoutes from './users'
|
import userRoutes from './users'
|
||||||
import staffRoutes from './staffs'
|
import staffRoutes from './staffs'
|
||||||
|
import pdfExtractionRoutes from './pdfExtraction';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
@@ -10,5 +11,6 @@ router.use('/patients', patientRoutes);
|
|||||||
router.use('/appointments', appointmentRoutes);
|
router.use('/appointments', appointmentRoutes);
|
||||||
router.use('/users', userRoutes);
|
router.use('/users', userRoutes);
|
||||||
router.use('/staffs', staffRoutes);
|
router.use('/staffs', staffRoutes);
|
||||||
|
router.use('/pdfExtraction/', pdfExtractionRoutes);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
23
apps/Backend/src/routes/pdfExtraction.ts
Normal file
23
apps/Backend/src/routes/pdfExtraction.ts
Normal file
@@ -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<any>=> {
|
||||||
|
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;
|
||||||
30
apps/Backend/src/services/pythonClient.ts
Normal file
30
apps/Backend/src/services/pythonClient.ts
Normal file
@@ -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<ExtractedData> {
|
||||||
|
const form = new FormData();
|
||||||
|
form.append("pdf", file.buffer, {
|
||||||
|
filename: file.originalname,
|
||||||
|
contentType: file.mimetype,
|
||||||
|
});
|
||||||
|
|
||||||
|
const response = await axios.post<ExtractedData>(
|
||||||
|
"http://localhost:5001/extract",
|
||||||
|
form,
|
||||||
|
{
|
||||||
|
headers: form.getHeaders(),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user