const express = require("express"); const router = express.Router(); const { ensureAuthenticated } = require("../middleware/auth"); const dashboardController = require("../controllers/dashboardController"); const uploadController = require("../controllers/uploadController"); const homeController = require("../controllers/homeController"); const aboutController = require("../controllers/aboutController"); const headerController = require("../controllers/headerController"); const footerController = require("../controllers/footerController"); const aboutUsController = require("../controllers/aboutUsController"); const formController = require("../controllers/formController"); const contactController = require("../controllers/contactController"); const campLocationController = require("../controllers/campLocationController"); const pageController = require("../controllers/pageController"); const settingController = require("../controllers/settingController"); const faqController = require("../controllers/faqController"); // Thêm import này const termsController = require("../controllers/termsController"); const travelController = require("../controllers/travelController"); const { upload, uploadVideo, convertToWebp } = require("../middleware/upload"); const safetyController = require("../controllers/safetyController"); const insuranceController = require("../controllers/insuranceController"); const activityController = require("../controllers/activityController"); const bookingSubmissionController = require("../controllers/bookingSubmissionController"); // Blog controllers const blogController = require("../controllers/blogController"); const blogCategoryController = require("../controllers/blogCategoryController"); const blogTagController = require("../controllers/blogTagController"); // Dashboard router.get("/dashboard", ensureAuthenticated, dashboardController.getDashboard); // Home router.get("/home", ensureAuthenticated, homeController.index); router.post("/home/update", ensureAuthenticated, homeController.update); // Middleware chuẩn hóa code router.param("code", (req, res, next, code) => { req.params.code = code.toUpperCase(); next(); }); // About router.get("/about", ensureAuthenticated, aboutController.index); router.post("/about/update", ensureAuthenticated, aboutController.update); // AboutUs admin CRUD router.get("/about-us", ensureAuthenticated, aboutUsController.index); router.get( "/about-us/create", ensureAuthenticated, aboutUsController.createForm ); router.post("/about-us/create", ensureAuthenticated, aboutUsController.create); router.get( "/about-us/:id/edit", ensureAuthenticated, aboutUsController.editForm ); router.post( "/about-us/:id/update", ensureAuthenticated, aboutUsController.update ); router.post( "/about-us/:id/delete", ensureAuthenticated, aboutUsController.delete ); router.get( "/about-us/:id/preview", ensureAuthenticated, aboutUsController.preview ); // Booking admin CRUD removed // Form Management router.get("/form", ensureAuthenticated, formController.index); router.post( "/form/update", ensureAuthenticated, formController.updateDefaultForm ); // Upload routes router.get("/upload", ensureAuthenticated, (req, res) => { res.render("admin/upload/index", { layout: "layouts/admin", title: "Quản lý Upload Ảnh", user: req.session.user, }); }); router.post( "/upload/image", ensureAuthenticated, upload.single("image"), // convertToWebp, // Disabled to keep original image format (JPG/PNG) uploadController.uploadImage ); router.post( "/upload/video", ensureAuthenticated, uploadVideo.single("video"), uploadController.uploadVideo ); router.post( "/upload/update-path", ensureAuthenticated, uploadController.updateImagePath ); router.post( "/upload/delete", ensureAuthenticated, uploadController.deleteImage ); // Header routes router.get("/header", ensureAuthenticated, headerController.index); router.post("/header/update", ensureAuthenticated, headerController.update); router.post( "/header/update-menu", ensureAuthenticated, headerController.updateMenu ); router.get( "/header/menu-tree", ensureAuthenticated, headerController.getMenuTree ); router.get( "/header/programmes/:menuId", ensureAuthenticated, headerController.getProgrammesByMenuId ); router.get( "/header/menu-item/:menuId", ensureAuthenticated, headerController.getMenuItem ); router.get("/header/data", ensureAuthenticated, headerController.getHeaderData); // Footer routes router.get("/footer", ensureAuthenticated, footerController.index); router.post("/footer/update", ensureAuthenticated, footerController.update); router.get("/footer/data", ensureAuthenticated, footerController.getFooterData); // Contact routes router.get("/contact", ensureAuthenticated, contactController.index); router.post("/contact/update", ensureAuthenticated, contactController.update); router.get( "/contact/data", ensureAuthenticated, contactController.getContactData ); // Activity CRUD routes router.get("/activity", ensureAuthenticated, activityController.index); router.get( "/activity/create", ensureAuthenticated, activityController.createForm ); router.post("/activity/create", ensureAuthenticated, activityController.create); // Update filters (place before any parameterized /activity/:id routes to avoid route collision) router.post( "/activity/filters/update", ensureAuthenticated, activityController.updateFilters ); // Update hero (global hero section for activities) router.post( "/activity/hero/update", ensureAuthenticated, activityController.updateHero ); router.get( "/activity/:id/edit", ensureAuthenticated, activityController.editForm ); router.post( "/activity/:id/update", ensureAuthenticated, activityController.update ); router.post( "/activity/:id/delete", ensureAuthenticated, activityController.delete ); router.post( "/activity/:id/toggle-status", ensureAuthenticated, activityController.toggleStatus ); // Update display order router.post( "/activity/update-order", ensureAuthenticated, activityController.updateOrder ); // Booking submissions routes router.get( "/activity/:id/bookings/count", ensureAuthenticated, activityController.getBookingCount ); router.get( "/activity/:id/bookings", ensureAuthenticated, activityController.getBookingSubmissions ); router.get( "/activity/:id/bookings/export", ensureAuthenticated, activityController.exportBookingData ); // Export all bookings (across all activities) router.get( "/bookings/export-all", ensureAuthenticated, activityController.exportAllBookingsData ); // Update booking submission router.put( "/bookings/:bookingId", ensureAuthenticated, bookingSubmissionController.updateBookingSubmission ); // Delete booking submission router.delete( "/bookings/:bookingId", ensureAuthenticated, bookingSubmissionController.deleteBookingSubmission ); // Update filters // Preview activity router.get( "/activity/:id/preview", ensureAuthenticated, activityController.preview ); // FAQ routes - Thêm vào đây router.get("/faq", ensureAuthenticated, faqController.index); router.post("/faq/update", ensureAuthenticated, faqController.update); router.get("/faq/data", ensureAuthenticated, faqController.getFAQData); router.get("/faq/api", faqController.api); // API routes cho quản lý FAQ items (AJAX calls) router.post("/faq/api/add-faq", ensureAuthenticated, faqController.addFAQ); router.put("/faq/api/update-faq-item/:sectionId/:faqId", ensureAuthenticated, faqController.updateFAQItem); router.delete("/faq/api/delete-faq-item/:sectionId/:faqId", ensureAuthenticated, faqController.deleteFAQItem); router.get("/terms-conditions", ensureAuthenticated, termsController.index); router.post("/terms/update", ensureAuthenticated, termsController.update); router.get("/terms/data", ensureAuthenticated, termsController.getTermsData); router.get("/terms/api", termsController.api); router.get("/terms/seed", ensureAuthenticated, termsController.seed); // Travel routes router.get("/travel", ensureAuthenticated, travelController.index); router.post("/travel/update", ensureAuthenticated, travelController.update); router.post("/travel/preview", ensureAuthenticated, travelController.preview); router.get("/travel/data", ensureAuthenticated, travelController.getTravelData); router.get("/travel/api", travelController.api); router.get("/travel/seed", ensureAuthenticated, travelController.seed); // API routes cho quản lý FAQ sections (AJAX calls) router.post("/faq/api/add-section", ensureAuthenticated, faqController.addFAQSection); router.put("/faq/api/update-section/:sectionId", ensureAuthenticated, faqController.updateFAQSection); router.delete("/faq/api/delete-section/:sectionId", ensureAuthenticated, faqController.deleteFAQSection); router.post("/faq/api/reorder-sections", ensureAuthenticated, faqController.reorderFAQSection); // API routes cho sidebar navigation (AJAX calls) router.put("/faq/api/update-sidebar", ensureAuthenticated, faqController.updateSidebarNav); // Safety routes router.get("/safety", ensureAuthenticated, safetyController.index); router.post("/safety/update", ensureAuthenticated, safetyController.update); // Camp Location routes router.get("/camp-location", ensureAuthenticated, campLocationController.index); router.post("/camp-location/update", ensureAuthenticated, campLocationController.update); //Insurance routes router.get("/insurance", ensureAuthenticated, insuranceController.index); router.post("/insurance/update", ensureAuthenticated, insuranceController.update); // Test Image Paths route router.get("/test-images", ensureAuthenticated, (req, res) => { const fs = require('fs'); const path = require('path'); const campLocationData = require('../data/camp-location.json'); // Collect all image paths const imagePaths = []; // Camps images if (campLocationData.camps) { campLocationData.camps.forEach(camp => { if (camp.image) { imagePaths.push({ type: 'Camp', name: camp.title, path: camp.image, exists: fs.existsSync(path.join(__dirname, '../public', camp.image)) }); } }); } // Locations images if (campLocationData.locations) { campLocationData.locations.forEach(location => { if (location.imageSrc) { imagePaths.push({ type: 'Location', name: location.title, path: location.imageSrc, exists: fs.existsSync(path.join(__dirname, '../public', location.imageSrc)) }); } // Program images if (location.programOptions) { location.programOptions.forEach(program => { if (program.imageSrc) { imagePaths.push({ type: 'Program', name: program.title, path: program.imageSrc, exists: fs.existsSync(path.join(__dirname, '../public', program.imageSrc)) }); } }); } }); } res.render('admin/test-images', { layout: 'layouts/admin', title: 'Test Image Paths', images: imagePaths, user: req.session.user }); }); // Blog routes // Blog Management Routes router.get("/blog", ensureAuthenticated, blogController.index); router.get("/blog/create", ensureAuthenticated, blogController.create); router.post("/blog/create", ensureAuthenticated, blogController.store); router.get("/blog/:id/edit", ensureAuthenticated, blogController.edit); router.post("/blog/:id/edit", ensureAuthenticated, blogController.update); router.post("/blog/:id/delete", ensureAuthenticated, blogController.destroy); // Blog Categories Management router.get("/blog/categories", ensureAuthenticated, blogCategoryController.index); router.get("/blog/categories/create", ensureAuthenticated, blogCategoryController.create); router.post("/blog/categories/create", ensureAuthenticated, blogCategoryController.store); router.get("/blog/categories/:id/edit", ensureAuthenticated, blogCategoryController.edit); router.post("/blog/categories/:id/edit", ensureAuthenticated, blogCategoryController.update); router.post("/blog/categories/:id/delete", ensureAuthenticated, blogCategoryController.destroy); router.post("/blog/categories/quick-create", ensureAuthenticated, blogCategoryController.quickCreate); // Blog Tags Management router.get("/blog/tags", ensureAuthenticated, blogTagController.index); router.get("/blog/tags/create", ensureAuthenticated, blogTagController.create); router.post("/blog/tags/create", ensureAuthenticated, blogTagController.store); router.get("/blog/tags/:id/edit", ensureAuthenticated, blogTagController.edit); router.post("/blog/tags/:id/edit", ensureAuthenticated, blogTagController.update); router.post("/blog/tags/:id/delete", ensureAuthenticated, blogTagController.destroy); router.post("/blog/tags/quick-create", ensureAuthenticated, blogTagController.quickCreate); module.exports = router;