vvet_backend_new/app.js

370 lines
12 KiB
JavaScript

// 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}`);
});