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;