// const express = require("express"); // const multer = require("multer"); // const axios = require("axios"); // const cors = require("cors"); // const mysql = require("mysql2/promise"); // const FormData = require("form-data"); // const app = express(); // const PORT = 5002; // app.use(express.json()); // app.use(cors()); // // Use multer memory storage for file uploads // const upload = multer({ storage: multer.memoryStorage() }); // // MySQL connection config — keys must be lowercase for mysql2 // const dbConfig = { // host: "122.166.69.162", // user: "rootuser", // password: "1234", // database: "vvvet", // port: 5002, // default MySQL port; change if needed // }; // let db; // (async () => { // try { // db = await mysql.createPool(dbConfig); // console.log("Connected to MySQL DB"); // } catch (err) { // console.error("MySQL connection error:", err); // } // })(); // // PAN verification API // app.post("/api/verify-pan", upload.single("panImage"), async (req, res) => { // try { // const { pan } = req.body; // const panImage = req.file; // if (!pan || !panImage) { // return res.status(400).json({ verified: false, message: "PAN and image are required" }); // } // // Validate PAN format // const panFormatRegex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/; // if (!panFormatRegex.test(pan)) { // return res.status(200).json({ verified: false, message: "Invalid PAN format" }); // } // // Prepare form data to send image buffer to Python OCR server // const formData = new FormData(); // formData.append("image", panImage.buffer, panImage.originalname); // // Send POST request to Python OCR server // const ocrResponse = await axios.post( // "https://api.vvet.in/extract-text", // formData, // { // headers: formData.getHeaders(), // } // ); // const extractedText = ocrResponse.data.text || ""; // console.log("Extracted Text from OCR:", extractedText); // if (!extractedText.toUpperCase().includes(pan.toUpperCase())) { // return res.status(200).json({ verified: false, message: "PAN not found in image" }); // } // return res.status(200).json({ verified: true, message: "PAN verified successfully" }); // } catch (error) { // console.error("Error in /api/verify-pan:", error); // return res.status(500).json({ verified: false, message: "Internal server error" }); // } // }); // // Fundraising submission API (example) // app.post("/api/fundraising/submit", upload.fields([ // { name: "feeDoc", maxCount: 1 }, // { name: "medicalPhoto", maxCount: 1 }, // { name: "medicalDoc", maxCount: 1 }, // { name: "document", maxCount: 1 }, // ]), async (req, res) => { // try { // const formData = req.body; // const files = req.files; // console.log("Received form data:", formData); // console.log("Received files:", files ? Object.keys(files) : "No files uploaded"); // if (!db) { // return res.status(500).json({ message: "DB connection not available" }); // } // const sql = `INSERT INTO fundraising // (name, email, phone, category, feeDoc_name, medicalPhoto_name, medicalDoc_name, document_name) // VALUES (?, ?, ?, ?, ?, ?, ?, ?)`; // const values = [ // formData.name || null, // formData.email || null, // formData.phone || null, // formData.category || null, // files?.feeDoc?.[0]?.originalname || null, // files?.medicalPhoto?.[0]?.originalname || null, // files?.medicalDoc?.[0]?.originalname || null, // files?.document?.[0]?.originalname || null, // ]; // await db.query(sql, values); // return res.status(200).json({ message: "Fundraising form submitted successfully" }); // } catch (error) { // console.error("Error in /api/fundraising/submit:", error); // return res.status(500).json({ message: "Internal server error" }); // } // }); // // Start the server // app.listen(PORT, () => { // console.log(`Server running on http://localhost:${PORT}`); // }); const express = require("express"); const multer = require("multer"); const axios = require("axios"); const cors = require("cors"); const mysql = require("mysql2/promise"); const FormData = require("form-data"); const extractDocumentRoute = require("./routes/extractDocument"); const app = express(); const PORT = 5002; app.use(express.json()); app.use(cors()); app.use("/api", extractDocumentRoute); // Use multer memory storage for file uploads const upload = multer({ storage: multer.memoryStorage() }); // MySQL connection config — keys must be lowercase for mysql2 const dbConfig = { host: "122.166.69.162", user: "rootuser", password: "1234", database: "vvvet", port: 3306, // Default MySQL port; change if needed }; let db; (async () => { try { db = await mysql.createPool(dbConfig); console.log("Connected to MySQL DB"); } catch (err) { console.error("MySQL connection error:", err); } })(); // PAN verification API app.post("/api/verify-pan", upload.single("panImage"), async (req, res) => { try { const { pan } = req.body; const panImage = req.file; if (!pan || !panImage) { return res.status(400).json({ verified: false, message: "PAN and image are required" }); } // Validate PAN format const panFormatRegex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/; if (!panFormatRegex.test(pan)) { return res.status(200).json({ verified: false, message: "Invalid PAN format" }); } // Prepare form data to send image buffer to Python OCR server const formData = new FormData(); formData.append("image", panImage.buffer, panImage.originalname); // Send POST request to Python OCR server const ocrResponse = await axios.post( "https://api.vvet.in/extract-text", formData, { headers: formData.getHeaders(), } ); const extractedText = ocrResponse.data.text || ""; console.log("Extracted Text from OCR:", extractedText); if (!extractedText.toUpperCase().includes(pan.toUpperCase())) { return res.status(200).json({ verified: false, message: "PAN not found in image" }); } return res.status(200).json({ verified: true, message: "PAN verified successfully" }); } catch (error) { console.error("Error in /api/verify-pan:", error); return res.status(500).json({ verified: false, message: "Internal server error" }); } }); // Fundraising submission API // app.post( // "/api/fundraising/submit", // upload.fields([ // { name: "feeDoc", maxCount: 1 }, // { name: "medicalPhoto", maxCount: 1 }, // { name: "medicalDoc", maxCount: 1 }, // { name: "document", maxCount: 1 }, // { name: "panImage", maxCount: 1 }, // ]), // async (req, res) => { // try { // const formData = req.body; // const files = req.files; // console.log("Received form data:", formData); // console.log("Received files:", files ? Object.keys(files) : "No files uploaded"); // if (!db) { // return res.status(500).json({ message: "DB connection not available" }); // } // const sql = `INSERT INTO fundraisings // (name, email, phone, category, feeDoc_name, medicalPhoto_name, medicalDoc_name, document_name) // VALUES (?, ?, ?, ?, ?, ?, ?, ?)`; // const values = [ // formData.name || null, // formData.email || null, // formData.phone || null, // formData.category || null, // files?.fee_Doc?.[0]?.originalname || null, // files?.medical_Photo?.[0]?.originalname || null, // files?.medical_Doc?.[0]?.originalname || null, // files?.document?.[0]?.originalname || null, // files?.panImage?.[0]?.originalname || null, // ]; // await db.query(sql, values); // return res.status(200).json({ message: "Fundraising form submitted successfully" }); // } catch (error) { // console.error("Error in /api/fundraising/submit:", error); // return res.status(500).json({ message: "Internal server error" }); // } // } // ); app.post( "/api/fundraising/submit", upload.fields([ { name: "feeDoc", maxCount: 1 }, { name: "medicalPhoto", maxCount: 1 }, { name: "medicalDoc", maxCount: 1 }, { name: "document", maxCount: 1 }, { name: "panImage", maxCount: 1 }, ]), async (req, res) => { try { const formData = req.body; const files = req.files; console.log("Received form data:", formData); console.log("Received files:", files ? Object.keys(files) : "No files uploaded"); if (!db) { return res.status(500).json({ message: "DB connection not available" }); } const sql = `INSERT INTO fundraisings ( name, email, phone, age, dob, category, pan_number, pan_document, fee_document, medical_document, other_document, transaction_screenshot, fundraising_amount, bank_account_holder_name, bank_name, bank_account_number, ifsc_code ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ? )`; const values = [ formData.name || null, formData.email || null, formData.phone || null, formData.age || null, formData.dob || null, formData.category || null, formData.pan || null, files?.panImage?.[0]?.originalname || null, files?.feeDoc?.[0]?.originalname || null, files?.medicalDoc?.[0]?.originalname || null, files?.document?.[0]?.originalname || null, files?.transactionScreenshot?.[0]?.originalname || null, formData.fundAmount || null, formData.bankHolderName || null, formData.bankName || null, formData.accountNumber || null, formData.ifscCode || null ]; await db.query(sql, values); return res.status(200).json({ message: "Fundraising form submitted successfully" }); } catch (error) { console.error("Error in /api/fundraising/submit:", error); return res.status(500).json({ message: "Internal server error" }); } } ); //donor submission API // Donor submission API app.post( "/api/donor/submit", upload.fields([ { name: "panImage", maxCount: 1 }, { name: "transactionScreenshot", maxCount: 1 }, ]), async (req, res) => { try { const formData = req.body; const files = req.files; if (!db) { return res.status(500).json({ message: "DB connection not available" }); } const sql = `INSERT INTO donors ( name, email, phone, age, dob, pan_number, pan_document, bank_account_holder_name, bank_name, bank_account_number, ifsc_code, donation_amount, payment, transaction_screenshot ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; const values = [ formData.name || null, formData.email || null, formData.phone || null, formData.age || null, formData.dob || null, formData.pan || null, files?.panImage?.[0]?.originalname || null, formData.bankHolderName || null, formData.bankName || null, formData.accountNumber || null, formData.ifscCode || null, formData.donation_Amount || null, formData.payment|| null, files?.transactionScreenshot?.[0]?.originalname || null, ]; await db.query(sql, values); return res.status(200).json({ message: "Donor form submitted successfully" }); } catch (error) { console.error("Error in /api/donor/submit:", error); return res.status(500).json({ message: "Internal server error" }); } } ); // Start the server app.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`); });