spurrin-backend/src/routes/appUsers.js
2025-07-29 14:52:32 +05:30

165 lines
5.4 KiB
JavaScript

const express = require("express");
const router = express.Router();
const appUserController = require("../controllers/appUserController");
const authMiddleware = require("../middlewares/authMiddleware");
const db = require("../config/database"); // Database connection
// Ensure the upload middleware is properly applied
const multer = require("multer");
const fs = require("fs");
const path = require("path");
// Multer Configuration (add this if missing)
const storage = multer.diskStorage({
destination: (req, file, cb) => {
const uploadPath = "uploads/id_photos/";
if (!fs.existsSync(uploadPath)) {
fs.mkdirSync(uploadPath, { recursive: true });
}
cb(null, uploadPath);
},
filename: (req, file, cb) => {
const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
const fileExtension = path.extname(file.originalname); // Get proper file extension
cb(null, `id_photo-${uniqueSuffix}${fileExtension}`); // Ensure proper extension
},
});
const upload = multer({
storage,
fileFilter: (req, file, cb) => {
if (file.mimetype.startsWith("image/")) {
cb(null, true);
} else {
cb(new Error("Only image files are allowed"), false);
}
},
});
router.post(
"/upload-id/:id",
authMiddleware.authenticateToken,
(req, res, next) =>
upload.single("id_photo_url")(req, res, async (err) => {
if (err instanceof multer.MulterError || err) {
console.error("Multer error:", err.message);
return res.status(400).json({ error: err.message });
}
if (!req.file) {
return res.status(400).json({ error: "No file uploaded" });
}
const userId = req.params.id;
const filePath = `/uploads/id_photos/${req.file.filename}`; // Correct file path
try {
const result = await db.query(
"UPDATE app_users SET upload_status = ?, id_photo_url = ? WHERE id = ?",
["1", filePath, userId]
);
next();
} catch (error) {
console.error("Database update error:", error.message);
return res
.status(500)
.json({ error: "Failed to update upload status" });
}
}),
appUserController.uploadIdPhoto
);
router.post("/login", appUserController.login);
router.put(
"/approve-id/:id",
authMiddleware.authenticateToken,
upload.none(), // Middleware to validate the token
appUserController.approveUserId // Controller to handle the approval logic
);
router.get(
"/hospital-users",
authMiddleware.authenticateToken, // Middleware to validate the access token
appUserController.getAppUsers // Controller to fetch app users
);
router.get(
"/hospital-users/:id",
authMiddleware.authenticateToken, // Middleware to validate the access token
appUserController.getAppUserByHospitalId // Controller to fetch app users
);
router.post("/signup", upload.single("id_photo_url"), appUserController.signup);
router.post(
"/logout",
authMiddleware.authenticateToken,
appUserController.logout
);
router.get(
"/appuser_status",
authMiddleware.authenticateToken,
appUserController.getAppUsersByHospitalCode
);
router.delete(
"/delete/:id",
authMiddleware.authenticateToken,
appUserController.deleteAppUser
);
// query title routes
router.put(
"/q-title",
authMiddleware.authenticateToken,
appUserController.updateQueryTitle
);
router.post(
"/q-title",
upload.none(), // Middleware to validate the token
authMiddleware.authenticateToken,
appUserController.getShortTitle
);
router.delete(
"/q-title",
upload.none(), // Middleware to validate the token
authMiddleware.authenticateToken,
appUserController.deleteQueryTitle
);
// change password
router.put("/change-password", upload.none(), appUserController.changePassword);
router.post("/send-otp", upload.none(), appUserController.sendOtp);
router.put("/change-pin", upload.none(), appUserController.changePinByOtp);
router.post("/send-pin-otp", upload.none(), appUserController.sendPinOtp);
// chat sessions
router.get('/chat-sessions', authMiddleware.authenticateToken, appUserController.getChatSessionsByAppUserID);
router.get('/chat/:session_id', authMiddleware.authenticateToken, appUserController.getChatForEachSession);
// delete chat sessions and chats do not delete logs make them inactive
router.put('/delete-session',upload.none() ,authMiddleware.authenticateToken, appUserController.deleteChatSessions);
router.put('/delete-chat',upload.none(), authMiddleware.authenticateToken, appUserController.clearChatbasedOnSessions);
router.post('/chat-logs-bytime', upload.none(),authMiddleware.authenticateToken, appUserController.getChatByTime);
// check email and hospital_code
router.post('/check-email-code', upload.none(), appUserController.checkEmailCode);
// get popular topics
router.get('/popular-topics',authMiddleware.authenticateToken, appUserController.getPopularTopics);
// Pin management routes
router.put('/change-pin', upload.none(), authMiddleware.authenticateToken, appUserController.changePin);
router.post('/forgot-pin', upload.none(), appUserController.forgotPin);
router.post('/verify-pin', upload.none(), appUserController.checkPin);
router.put('/update-settings', upload.none(), authMiddleware.authenticateToken, appUserController.updateSettings);
router.put('/like', upload.none(), authMiddleware.authenticateToken, appUserController.hitlike);
router.put('/flag', upload.none(), authMiddleware.authenticateToken, appUserController.hitFlag);
module.exports = router;