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"); const serviceController = require("../controllers/serviceController"); // 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, ); // Contact submissions management router.get( "/contact/submissions", ensureAuthenticated, contactController.getSubmissions ); router.put( "/contact/submissions/:id", ensureAuthenticated, contactController.updateSubmissionStatus ); // Appointment management const appointmentController = require("../controllers/appointmentController"); router.get( "/appointments", ensureAuthenticated, appointmentController.getAppointments ); router.get( "/appointments/:id", ensureAuthenticated, appointmentController.getAppointmentById ); router.put( "/appointments/:id", ensureAuthenticated, appointmentController.updateAppointmentStatus ); router.delete( "/appointments/:id", ensureAuthenticated, appointmentController.deleteAppointment ); // Appointment CMS page management router.get("/appointment", ensureAuthenticated, appointmentController.index); router.post("/appointment/update", ensureAuthenticated, appointmentController.update); router.get("/appointment/data", ensureAuthenticated, appointmentController.getAppointmentData); // Pricing CMS page management const pricingController = require("../controllers/pricingController"); router.get("/pricing", ensureAuthenticated, pricingController.index); router.post("/pricing/update", ensureAuthenticated, pricingController.update); router.get("/pricing/data", ensureAuthenticated, pricingController.getPricingData); // 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, ); // Service routes router.get("/service", ensureAuthenticated, serviceController.index); router.post("/service/update", ensureAuthenticated, serviceController.update); router.post( "/service/generate-slug", ensureAuthenticated, serviceController.generateSlug, ); router.get("/service/:slug/edit", ensureAuthenticated, serviceController.edit); router.post( "/service/:slug/edit", ensureAuthenticated, serviceController.updateService, ); router.get( "/service/:slug/details", ensureAuthenticated, serviceController.details, ); router.post( "/service/:slug/details/update", ensureAuthenticated, serviceController.updateDetails, ); // 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;