From 9dc02974a4be040cb6de64d89a1b87ccf3b16033 Mon Sep 17 00:00:00 2001 From: nguyenvanbao Date: Tue, 3 Feb 2026 16:20:07 +0700 Subject: [PATCH 1/3] feat: add service management module with CRUD operations --- controllers/serviceController.js | 360 ++++++++ data/service.json | 363 ++++++++ models/service.js | 118 +++ public/img/default.jpg | Bin 0 -> 2220 bytes public/uploads/service/03.jpg | Bin 0 -> 1465 bytes public/uploads/service/404.png | Bin 0 -> 9463 bytes public/uploads/service/Dell_Inspiron15.webp | Bin 0 -> 13136 bytes public/uploads/service/intro.jpg | Bin 0 -> 12102 bytes public/uploads/service/iphone15.webp | Bin 0 -> 28334 bytes .../uploads/service/smart_samsung_55inch.jpg | Bin 0 -> 62236 bytes routes/admin.js | 187 +++-- routes/index.js | 52 +- scripts/2026_02_02_131615_service.js | 186 +++++ server.js | 14 + services/service.service.js | 43 + utils/imageHelper.js | 57 +- views/admin/dashboard.ejs | 675 ++++++++++++--- views/admin/service/details.ejs | 723 ++++++++++++++++ views/admin/service/edit.ejs | 440 ++++++++++ views/admin/service/index.ejs | 782 ++++++++++++++++++ views/layouts/main.ejs | 6 + 21 files changed, 3798 insertions(+), 208 deletions(-) create mode 100644 controllers/serviceController.js create mode 100644 data/service.json create mode 100644 models/service.js create mode 100644 public/img/default.jpg create mode 100644 public/uploads/service/03.jpg create mode 100644 public/uploads/service/404.png create mode 100644 public/uploads/service/Dell_Inspiron15.webp create mode 100644 public/uploads/service/intro.jpg create mode 100644 public/uploads/service/iphone15.webp create mode 100644 public/uploads/service/smart_samsung_55inch.jpg create mode 100644 scripts/2026_02_02_131615_service.js create mode 100644 services/service.service.js create mode 100644 views/admin/service/details.ejs create mode 100644 views/admin/service/edit.ejs create mode 100644 views/admin/service/index.ejs diff --git a/controllers/serviceController.js b/controllers/serviceController.js new file mode 100644 index 0000000..33b36ac --- /dev/null +++ b/controllers/serviceController.js @@ -0,0 +1,360 @@ +const { getServiceData } = require("../services/service.service"); +const Service = require("../models/service"); +const { addBaseUrlToImages, getFullImageUrl } = require("../utils/imageHelper"); +const slugify = require("slugify"); + +// Admin page - Service list +exports.index = async (req, res) => { + try { + const data = await getServiceData(); + console.log(data.services.items.image); + res.render("admin/service/index", { + title: "Service Management", + data, + layout: "layouts/main", + getFullImageUrl, // Truyền helper function vào view + }); + } catch (err) { + console.error(err); + req.flash("error_msg", "Error loading service data"); + res.redirect("/admin/dashboard"); + } +}; + +// Admin page - Service edit +exports.edit = async (req, res) => { + try { + const { slug } = req.params; + const data = await getServiceData(); + + const service = data.services?.items?.find((item) => item.slug === slug); + if (!service) { + req.flash("error_msg", "Service not found"); + return res.redirect("/admin/service"); + } + + res.render("admin/service/edit", { + title: `Edit Service - ${service.name}`, + service, + layout: "layouts/main", + getFullImageUrl, + }); + } catch (err) { + console.error(err); + req.flash("error_msg", "Error loading service for editing"); + res.redirect("/admin/service"); + } +}; + +// Update single service +exports.updateService = async (req, res) => { + try { + const { slug } = req.params; + const currentData = await getServiceData(); + + const serviceIndex = currentData.services?.items?.findIndex( + (item) => item.slug === slug, + ); + if (serviceIndex === -1) { + req.flash("error_msg", "Service not found"); + return res.redirect("/admin/service"); + } + + // Update service data + const updatedData = { ...currentData.toObject?.() }; + updatedData.services.items[serviceIndex] = { + ...updatedData.services.items[serviceIndex], + name: req.body.name, + slug: req.body.slug, + description: req.body.description, + image: req.body.image, + layout: req.body.layout, + }; + + if (currentData._id) { + await Service.findByIdAndUpdate(currentData._id, updatedData); + } else { + await Service.create(updatedData); + } + + req.flash("success_msg", "Service updated successfully"); + res.redirect("/admin/service"); + } catch (err) { + console.error(err); + req.flash("error_msg", err.message); + res.redirect("/admin/service"); + } +}; + +// Admin page - Service details +exports.details = async (req, res) => { + try { + const { slug } = req.params; + const data = await getServiceData(); + + const service = data.services?.items?.find((item) => item.slug === slug); + if (!service) { + req.flash("error_msg", "Service not found"); + return res.redirect("/admin/service"); + } + + res.render("admin/service/details", { + title: `Service Details - ${service.name}`, + service, + layout: "layouts/main", + getFullImageUrl, // Truyền helper function vào view + }); + } catch (err) { + console.error(err); + req.flash("error_msg", "Error loading service details"); + res.redirect("/admin/service"); + } +}; + +// Update service list +exports.update = async (req, res) => { + try { + const currentData = await getServiceData(); + const sections = [ + "pageTitle", + "services", + "destinations", + "visas", + "reviews", + ]; + + let updatedData = { ...currentData.toObject?.() }; + let hasChanges = false; + + sections.forEach((section) => { + if (!req.body[section]) return; + + const newData = JSON.parse(req.body[section]); + if (JSON.stringify(newData) !== JSON.stringify(currentData[section])) { + updatedData[section] = newData; + hasChanges = true; + } + }); + + if (!hasChanges) { + req.flash("info_msg", "No changes were made"); + return res.redirect("/admin/service"); + } + + if (currentData._id) { + await Service.findByIdAndUpdate(currentData._id, updatedData); + } else { + await Service.create(updatedData); + } + + req.flash("success_msg", "Service updated successfully"); + res.redirect("/admin/service"); + } catch (err) { + console.error(err); + req.flash("error_msg", err.message); + res.redirect("/admin/service"); + } +}; + +// Update service details +exports.updateDetails = async (req, res) => { + try { + const { slug } = req.params; + const currentData = await getServiceData(); + + const serviceIndex = currentData.services?.items?.findIndex( + (item) => item.slug === slug, + ); + if (serviceIndex === -1) { + req.flash("error_msg", "Service not found"); + return res.redirect("/admin/service"); + } + + // Parse features and FAQ from JSON strings + const features = req.body.features ? JSON.parse(req.body.features) : []; + const faq = req.body.faq ? JSON.parse(req.body.faq) : []; + + // Update service details + const updatedData = { ...currentData.toObject?.() }; + updatedData.services.items[serviceIndex].details = { + title: req.body.title, + description: req.body.description, + mainImage: req.body.mainImage, + overviewTitle: req.body.overviewTitle, + overviewDescription: req.body.overviewDescription, + additionalDescription: req.body.additionalDescription, + keyFeaturesTitle: req.body.keyFeaturesTitle, + keyFeaturesImage: req.body.keyFeaturesImage, + features: features, + faqTitle: req.body.faqTitle, + faqImage: req.body.faqImage, + faq: faq, + }; + + if (currentData._id) { + await Service.findByIdAndUpdate(currentData._id, updatedData); + } else { + await Service.create(updatedData); + } + + req.flash("success_msg", "Service details updated successfully"); + res.redirect(`/admin/service/${slug}/details`); + } catch (err) { + console.error(err); + req.flash("error_msg", err.message); + res.redirect("/admin/service"); + } +}; + +// API endpoint +exports.api = async (req, res) => { + try { + const serviceData = await getServiceData(); + const baseUrl = + process.env.BACKEND_URL || `${req.protocol}://${req.get("host")}`; + + const processedData = addBaseUrlToImages(serviceData, baseUrl); + res.json(processedData); + } catch (err) { + res.status(500).json({ error: "Error loading service data" }); + } +}; + +/** + * Get service details by slug - API endpoint + */ +exports.getServiceBySlug = async (req, res) => { + try { + const { slug } = req.params; + + const serviceDoc = await Service.findOne().lean(); + + if (!serviceDoc) { + return res.status(404).json({ + success: false, + message: "Service data not found", + }); + } + + // Find service by slug + const service = serviceDoc.services?.items?.find( + (item) => item.slug === slug, + ); + + if (!service) { + return res.status(404).json({ + success: false, + message: `Service with slug '${slug}' not found`, + }); + } + + const baseUrl = + process.env.BACKEND_URL || `${req.protocol}://${req.get("host")}`; + + // Return service details in the expected format + const responseData = { + pageTitle: serviceDoc.pageTitle, + breadcrumb: { + ...serviceDoc.breadcrumb, + title: "Service Details", + items: [ + { label: "Home", href: "/" }, + { label: "Services", href: "/services" }, + { label: service.name, href: `/services/${slug}` }, + ], + }, + serviceDetails: { + content: service.details, + keyFeatures: { + title: service.details.keyFeaturesTitle || "Key Features", + sideImage: service.details.keyFeaturesImage || "img/default.jpg", + items: service.details.features || [], + }, + faq: { + title: service.details.faqTitle || "Frequently Asked Questions", + sideImage: service.details.faqImage || "img/default.jpg", + items: service.details.faq || [], + }, + }, + }; + + const processedData = addBaseUrlToImages(responseData, baseUrl); + res.json(processedData); + } catch (error) { + console.error("Error fetching service by slug:", error); + res.status(500).json({ + success: false, + message: "Internal server error", + error: error.message, + }); + } +}; + +/** + * Generate slug from text - API endpoint + */ +exports.generateSlug = async (req, res) => { + try { + const { text } = req.body; + + if (!text || typeof text !== "string") { + return res.status(400).json({ + success: false, + message: "Text is required", + }); + } + + // Generate slug using slugify library with Vietnamese support + const slug = slugify(text, { + lower: true, + strict: true, + locale: "vi", + }); + + res.json({ + success: true, + slug: slug, + }); + } catch (error) { + console.error("Error generating slug:", error); + res.status(500).json({ + success: false, + message: "Internal server error", + error: error.message, + }); + } +}; + +/** + * Get all service slugs - API endpoint + */ +exports.getServiceSlugs = async (req, res) => { + try { + const serviceDoc = await Service.findOne().lean(); + + if (!serviceDoc?.services?.items) { + return res.json({ + success: true, + slugs: [], + }); + } + + const slugs = serviceDoc.services.items.map((item) => ({ + slug: item.slug, + name: item.name, + id: item.id, + })); + + res.json({ + success: true, + slugs, + }); + } catch (error) { + console.error("Error fetching service slugs:", error); + res.status(500).json({ + success: false, + message: "Internal server error", + error: error.message, + }); + } +}; diff --git a/data/service.json b/data/service.json new file mode 100644 index 0000000..0b524c7 --- /dev/null +++ b/data/service.json @@ -0,0 +1,363 @@ +{ + "pageTitle": "Visaway – Immigration & Visa Consulting HTML Template", + + "services": { + "title": { + "subTitle": "What We Offer", + "mainTitle": "Our Immigration Services" + }, + "items": [ + { + "slug": "immigration-appeal", + "name": "Immigration Appeal & Legal Support", + "description": "Our experts provide professional guidance for immigration appeals and legal matters, helping clients overcome visa rejections with personalized strategies and strong case representation.", + "image": "img/home-3/service/01.jpg", + "layout": "left", + "details": { + "title": "Immigration Appeal & Legal Support", + "description": "Our experts provide professional guidance for immigration appeals and legal matters, helping clients overcome visa rejections with personalized strategies and strong case representation. We analyze your case thoroughly and develop custom strategies to maximize your chances of success.", + "mainImage": "img/inner-page/service-details/details-1.jpg", + "overviewTitle": "Service Overview", + "overviewDescription": "Our Immigration Appeal & Legal Support service is designed to help clients navigate complex immigration challenges. We provide expert legal guidance, case analysis, and strategic representation to maximize your chances of success. With our expert consultants, personalized approach, and global network, we ensure a smooth transition for every client.", + "additionalDescription": "From start to finish, we are committed to turning your immigration challenges into success stories through professional legal representation and strategic planning.", + "keyFeaturesTitle": "Key Features", + "keyFeaturesImage": "img/inner-page/service-details/details-2.jpg", + "features": [ + { + "title": "Personalized Guidance", + "description": "Tailored support for each client's specific legal situation and requirements." + }, + { + "title": "Expert Legal Team", + "description": "Experienced immigration lawyers with proven track records in appeals." + }, + { + "title": "Case Analysis & Strategy", + "description": "Thorough case review and development of winning appeal strategies." + }, + { + "title": "Document Preparation", + "description": "Professional preparation of all legal documents and supporting evidence." + }, + { + "title": "Court Representation", + "description": "Expert representation in immigration courts and tribunals." + }, + { + "title": "Success Monitoring", + "description": "Regular updates and monitoring throughout the appeal process." + } + ], + "faqTitle": "Frequently Asked Question", + "faqImage": "img/inner-page/service-details/details-3.jpg", + "faq": [ + { + "id": "faq-appeal-1", + "question": "01. What are the chances of a successful appeal?", + "answer": "Success rates vary by case type and circumstances, but our experienced legal team significantly improves your chances through thorough case analysis and strategic representation tailored to your specific situation.", + "isExpanded": false + }, + { + "id": "faq-appeal-2", + "question": "02. How long does the appeal process take?", + "answer": "Appeal timelines vary by jurisdiction and case complexity, typically ranging from 6-18 months. We keep you informed throughout the process and work to expedite where possible.", + "isExpanded": false + }, + { + "id": "faq-appeal-3", + "question": "03. What documents do I need for an appeal?", + "answer": "Required documents vary by case but typically include the original decision, supporting evidence, and legal submissions. We provide a comprehensive checklist and assist with document preparation.", + "isExpanded": false + }, + { + "id": "faq-appeal-4", + "question": "04. Do you handle all types of immigration appeals?", + "answer": "Yes, we handle various types of immigration appeals including visa refusals, deportation orders, and residency rejections. Our team has expertise across all immigration categories.", + "isExpanded": false + } + ] + } + }, + { + "slug": "scholarship-guidance", + "name": "Scholarship & Study Grant Guidance", + "description": "We help students unlock opportunities to study abroad with the right financial support. Our expert advisors guide you in finding scholarships, grants, and funding options that match your academic background, chosen destination, and career goals.", + "image": "img/home-3/service/02.jpg", + "layout": "right", + "details": { + "title": "Scholarship & Study Grant Guidance", + "description": "We help students unlock opportunities to study abroad with the right financial support. Our expert advisors guide you in finding scholarships, grants, and funding options that match your academic background, chosen destination, and career goals. From preparing strong applications to meeting eligibility criteria, we ensure you maximize your chances of securing financial aid.", + "mainImage": "img/inner-page/service-details/details-1.jpg", + "overviewTitle": "Service Overview", + "overviewDescription": "Our Education Visa Consultancy is dedicated to guiding students in achieving their study abroad dreams. We provide complete support including university selection, application assistance, scholarship guidance, visa documentation, and interview preparation. With our expert consultants, personalized approach, and global network, we ensure a smooth transition for every student.", + "additionalDescription": "From start to finish, we are committed to turning your education journey into a successful international experience.", + "keyFeaturesTitle": "Key Features", + "keyFeaturesImage": "img/inner-page/service-details/details-2.jpg", + "features": [ + { + "title": "Personalized Guidance", + "description": "Tailored support for each student's goals and requirements." + }, + { + "title": "Target Audience & Persona Development", + "description": "Experienced team with global education and visa knowledge." + }, + { + "title": "Scholarship & Grant Assistance", + "description": "Helping students secure financial aid opportunities." + }, + { + "title": "Visa Application Support", + "description": "Step-by-step guidance for smooth visa processing." + }, + { + "title": "Interview Preparation", + "description": "Coaching for successful student visa interviews." + }, + { + "title": "Documentation Assistance", + "description": "Accurate and complete paperwork for faster approvals." + } + ], + "faqTitle": "Frequently Asked Question", + "faqImage": "img/inner-page/service-details/details-3.jpg", + "faq": [ + { + "id": "faq-scholarship-1", + "question": "01. Do you assist with university selection?", + "answer": "Absolutely! We identify suitable scholarships, guide application processes, and maximize your chances of receiving financial aid.", + "isExpanded": false + }, + { + "id": "faq-scholarship-2", + "question": "02. Can you help with scholarship applications?", + "answer": "Absolutely! We identify suitable scholarships, guide application processes, and maximize your chances of receiving financial aid.", + "isExpanded": true + }, + { + "id": "faq-scholarship-3", + "question": "03. How long does the visa process take?", + "answer": "Absolutely! We identify suitable scholarships, guide application processes, and maximize your chances of receiving financial aid.", + "isExpanded": false + }, + { + "id": "faq-scholarship-4", + "question": "04. Is post-arrival support available?", + "answer": "Absolutely! We identify suitable scholarships, guide application processes, and maximize your chances of receiving financial aid.", + "isExpanded": false + } + ] + } + }, + { + "slug": "permanent-residency", + "name": "Permanent Residency (PR) Services", + "description": "Our PR services guide clients through every step of the residency process, including documentation, eligibility assessment, and application support, ensuring a smooth and successful approval.", + "image": "img/home-3/service/03.jpg", + "layout": "left", + "details": { + "title": "Permanent Residency (PR) Services", + "description": "Our PR services guide clients through every step of the residency process, including documentation, eligibility assessment, and application support, ensuring a smooth and successful approval.", + "mainImage": "img/inner-page/service-details/details-1.jpg", + "overviewTitle": "Service Overview", + "overviewDescription": "Our Permanent Residency services provide comprehensive support for individuals seeking to establish permanent residence in their chosen country. We handle all aspects of the PR application process with expertise and care.", + "additionalDescription": "Our experienced team ensures that your PR application is handled professionally and efficiently, maximizing your chances of approval.", + "keyFeaturesTitle": "Key Features", + "keyFeaturesImage": "img/inner-page/service-details/details-2.jpg", + "features": [ + { + "title": "Eligibility Assessment", + "description": "Comprehensive evaluation of your PR eligibility and options." + }, + { + "title": "Points Calculation", + "description": "Accurate calculation and optimization of your points score." + }, + { + "title": "Document Verification", + "description": "Thorough verification and preparation of all required documents." + }, + { + "title": "Application Tracking", + "description": "Regular updates and tracking of your PR application status." + }, + { + "title": "Interview Preparation", + "description": "Coaching and preparation for PR interviews if required." + }, + { + "title": "Post-Approval Support", + "description": "Guidance on next steps after PR approval and settlement." + } + ], + "faqTitle": "Frequently Asked Question", + "faqImage": "img/inner-page/service-details/details-3.jpg", + "faq": [ + { + "id": "faq-pr-1", + "question": "01. How long does the PR process take?", + "answer": "Processing times vary by country and program, typically ranging from 12-24 months. We provide realistic timelines based on current processing standards.", + "isExpanded": false + }, + { + "id": "faq-pr-2", + "question": "02. What documents are required for PR application?", + "answer": "Document requirements vary by country but typically include educational credentials, work experience, language test results, and medical examinations. We provide a complete checklist.", + "isExpanded": true + }, + { + "id": "faq-pr-3", + "question": "03. Can I include my family in the PR application?", + "answer": "Yes, most PR programs allow you to include your spouse and dependent children. We help you understand family inclusion requirements and processes.", + "isExpanded": false + }, + { + "id": "faq-pr-4", + "question": "04. What happens if my PR application is rejected?", + "answer": "If rejected, we analyze the reasons and explore options including appeals, reapplication, or alternative immigration pathways to achieve your goals.", + "isExpanded": false + } + ] + } + }, + { + "slug": "citizenship-naturalization", + "name": "Citizenship & Naturalization Guidance", + "description": "We provide expert guidance for citizenship and naturalization processes, assisting clients with documentation, eligibility, and legal procedures to achieve a smooth and successful application.", + "image": "img/home-3/service/04.jpg", + "layout": "right", + "details": { + "title": "Citizenship & Naturalization Guidance", + "description": "We provide expert guidance for citizenship and naturalization processes, assisting clients with documentation, eligibility, and legal procedures to achieve a smooth and successful application.", + "mainImage": "img/inner-page/service-details/details-1.jpg", + "overviewTitle": "Service Overview", + "overviewDescription": "Our Citizenship & Naturalization service helps individuals navigate the complex process of becoming a citizen. We provide step-by-step guidance, documentation support, and legal expertise throughout the entire process.", + "additionalDescription": "With our comprehensive approach, we make the path to citizenship clear, manageable, and successful for every client.", + "keyFeaturesTitle": "Key Features", + "keyFeaturesImage": "img/inner-page/service-details/details-2.jpg", + "features": [ + { + "title": "Citizenship Test Preparation", + "description": "Comprehensive preparation for citizenship knowledge tests." + }, + { + "title": "Language Requirements", + "description": "Guidance on meeting language proficiency requirements." + }, + { + "title": "Residency Verification", + "description": "Assistance with proving residency and physical presence requirements." + }, + { + "title": "Application Processing", + "description": "Complete support throughout the citizenship application process." + }, + { + "title": "Interview Coaching", + "description": "Preparation and coaching for citizenship interviews." + }, + { + "title": "Ceremony Preparation", + "description": "Support and guidance for the citizenship ceremony process." + } + ], + "faqTitle": "Frequently Asked Question", + "faqImage": "img/inner-page/service-details/details-3.jpg", + "faq": [ + { + "id": "faq-citizenship-1", + "question": "What are the basic requirements for citizenship?", + "answer": "Requirements typically include permanent residency, physical presence, language proficiency, and knowledge of the country's history and government. Specific requirements vary by country.", + "isExpanded": false + }, + { + "id": "faq-citizenship-2", + "question": "How do I prepare for the citizenship test?", + "answer": "We provide comprehensive study materials, practice tests, and coaching sessions to help you prepare for both the knowledge test and language requirements.", + "isExpanded": false + }, + { + "id": "faq-citizenship-3", + "question": "How long does the citizenship process take?", + "answer": "Processing times vary by country but typically range from 12-24 months from application to ceremony. We help you understand specific timelines for your situation.", + "isExpanded": false + }, + { + "id": "faq-citizenship-4", + "question": "Can I maintain dual citizenship?", + "answer": "Dual citizenship policies vary by country. We help you understand the implications and requirements for maintaining multiple citizenships if applicable.", + "isExpanded": false + } + ] + } + } + ] + }, + + "destinations": { + "backgroundImage": "img/home-3/choose-us/bg.png", + "title": { + "subTitle": "Countries we offer", + "mainTitle": "Choose Your Immigration Destination" + } + }, + + "visas": { + "items": [ + { + "id": "family-visa", + "number": "01", + "name": "Family Visa", + "description": "Our Family Visa services help reunite loved ones by providing expert guidance.", + "buttonText": "service _ 02", + "buttonLink": "service-details.html" + }, + { + "id": "student-visa", + "number": "02", + "name": "Student Visa", + "description": "We provide expert guidance for student visa applications.", + "buttonText": "service _ 02", + "buttonLink": "service-details.html" + }, + { + "id": "work-visa", + "number": "03", + "name": "Work Visa", + "description": "Collaboratively disintermediate one to one functionalities and long term.", + "buttonText": "service _ 02", + "buttonLink": "service-details.html" + } + ] + }, + + "reviews": { + "title": { + "subTitle": "What Our Clients Say", + "mainTitle": "Immigration Success Stories" + }, + "thumb": "img/home-3/test-thumb.jpg", + "items": [ + { + "id": "client-review-1", + "rating": 5, + "content": "The team provided exceptional guidance throughout my immigration process.", + "author": { + "name": "Mohammed Ali,", + "type": "Family Visa" + }, + "icon": "fa-solid fa-quote-right" + }, + { + "id": "client-review-2", + "rating": 5, + "content": "Their expertise and personalized support ensured a smooth visa approval.", + "author": { + "name": "Sarah Johnson,", + "type": "Student Visa" + }, + "icon": "fa-solid fa-quote-right" + } + ] + } +} diff --git a/models/service.js b/models/service.js new file mode 100644 index 0000000..a1d0f2e --- /dev/null +++ b/models/service.js @@ -0,0 +1,118 @@ +const mongoose = require("mongoose"); + +// Define sub-schemas first +const authorSchema = new mongoose.Schema( + { + name: String, + type: String, + }, + { _id: false }, +); + +const clientReviewSchema = new mongoose.Schema( + { + id: String, + rating: Number, + content: String, + author: authorSchema, + icon: String, + }, + { _id: false }, +); + +const featureSchema = new mongoose.Schema( + { + title: String, + description: String, + }, + { _id: false }, +); + +const faqSchema = new mongoose.Schema( + { + id: String, + question: String, + answer: String, + isExpanded: { type: Boolean, default: false }, + }, + { _id: false }, +); + +const serviceDetailsSchema = new mongoose.Schema( + { + title: String, + description: String, + mainImage: String, + overviewTitle: String, + overviewDescription: String, + additionalDescription: String, + keyFeaturesTitle: String, + keyFeaturesImage: String, + features: [featureSchema], + faqTitle: String, + faqImage: String, + faq: [faqSchema], + }, + { _id: false }, +); + +// Main service page schema +const serviceSchema = new mongoose.Schema( + { + pageTitle: String, + + // Main services section + services: { + title: { + subTitle: String, + mainTitle: String, + }, + items: [ + { + slug: String, + name: String, + description: String, + image: String, + layout: String, + details: serviceDetailsSchema, + }, + ], + }, + + // Destination countries section + destinations: { + backgroundImage: String, + title: { + subTitle: String, + mainTitle: String, + }, + }, + + // Visa types section + visas: { + items: [ + { + id: String, + number: String, + name: String, + description: String, + buttonText: String, + buttonLink: String, + }, + ], + }, + + // Client reviews section + reviews: { + title: { + subTitle: String, + mainTitle: String, + }, + thumb: String, + items: [clientReviewSchema], + }, + }, + { timestamps: true }, +); + +module.exports = mongoose.model("Service", serviceSchema); diff --git a/public/img/default.jpg b/public/img/default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0e2512518fd43726d8c8f0a871331049aefd729 GIT binary patch literal 2220 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 J)?5z0`#(DS(!2lw literal 0 HcmV?d00001 diff --git a/public/uploads/service/404.png b/public/uploads/service/404.png new file mode 100644 index 0000000000000000000000000000000000000000..f7c61d3aeebeaf38303cec0a8a45427a2c81e7d5 GIT binary patch literal 9463 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 literal 0 HcmV?d00001 diff --git a/public/uploads/service/Dell_Inspiron15.webp b/public/uploads/service/Dell_Inspiron15.webp new file mode 100644 index 0000000000000000000000000000000000000000..00b169da52f5ed860f1d3aa4a540524edda18222 GIT binary patch literal 13136 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 literal 0 HcmV?d00001 diff --git a/public/uploads/service/iphone15.webp b/public/uploads/service/iphone15.webp new file mode 100644 index 0000000000000000000000000000000000000000..d1588400e08b94f73a4784e88dc361997e7ebcfa GIT binary patch literal 28334 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 AKL7v# literal 0 HcmV?d00001 diff --git a/public/uploads/service/smart_samsung_55inch.jpg b/public/uploads/service/smart_samsung_55inch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07ede78d41fd2aa6cfe9f50c51a923e71e811760 GIT binary patch literal 62236 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

2P zBj`)@l-Rw;YoSx!U`SkH}a98ZC85f^f9s0v7-!K_8eCTaw^%J*!D1h z-!e%M7~$9w%C1|8R%9iL#ocTdR$x0OA=MB%PnfJSrc(6dUdPBU+ zGQH=OPF>NU|C69jje##6d|Rw06{GUA3XE4qC4(d-Hcvp+4_TI7hTOHH!9a5f3Nf{gpav?!xsqq_&`Dgxyb8%rip!}P%{w)PeoZiMuBC)Mqm-t75|sspT7 z_V9&4T*hbuKFjQ5uaJbtZ;P*QU_=DUts9}zPEzA{h=T#z&+ZZxe~APlsp`r|!8_mV z9(inIAk1ePo&~oO=+sW_=iO=`XNCV-Akg649L{>E1c!W()^%5iH$#|gH^ z?h{_9^h|+9nR8d$pBcGj2e(sJI`kw{tpHn1YjrciAy^#ZcY*+dq)-sB-R^0UQ>v7_ zXUcqC1isfAG&_1IpJVo7)yz$ed60O+n#E0B|9qI>^oq=+N`svbILr zzaxBNGt<+i-kVu4&p8d@YUGPu1ojFDhjB{Sa#WL?&OAS&yYxbBnTpChFqJTlC7_M) z*&i}%Sc;q`!lYFY-wLeQK`xS{<&yY=6qzH|8z|fg%ZON{{9#tnW**K#>^?58%*~v% zhArODgc!JcgEH#xjoZX(We5c7OfT3Dtw<74ZmF*L`1fv$Blk^eKl_l8=6;*7ySHt@+gN8ufDhaml95)bJg9U+5nNLQwm^!`-qTeta=D2 z9%ST~#n%$){;-!FwZk)JYmQR~@1ll{)q0pb7Q>i!de@Ac`5})aHi~*=O=U@%;Q}MD z4f}SIVb_%PDncc`UKzc%ez)xYp$fy3DJ|*p<+Av1{l&t=4O@9bTpQaYzRwjp>q~^t zN^~DJTv3ayy3VI;Bxo5^%ist680S=Vw%^5)SvP$%y4hI)fp!Ywi0>zPN0)|hn3!(L zqQjDv63Pv^$G?{OooI&ket+6CgmZG4OpN9&^Re~3$>}tUox(2buLl4)ywPzC+OE)& zxMcskFazx@Pcg&8>_CZHI^8@P94GC0#YV8*Unad|JX6pVVYP2jHkw*5S6Za(cMs?KsDL(F|#sb-<4 zUoMZAwxndk$UUOw*L*Sy!tkLjo_b@f!DnN}i1)i+;OW`Gy@PlvlY{F|jP!8%i(A!N zM-83RiDLj3Fg~Qx?@TjlMp27cH@pYAJ4zp8^W#|DB6%-M43?n^?S2xZ5+iXfl%f;+jhS4|xUJYp6}x$a3a6`w zNi>bLA5qY8u_N0!#3fMYpapsC@GmQo5?pX>GjSf#bspM_k}|7+^{{y@54>FX?k453 zW>9a>2l}>5(3P`7%Qh%wvCu{j0u1b3L8rZ=sa~$j4@zDSSqz)`*Uk;HrhyzOMWhzm zI?WSn*yI@@ZYrp-XK>IwD?!nPJU+oJ6~dbs z2ZO&Z=a5f|`5XMUhpq=luZrg_ZZ#(_Pc*|a_)DX(-kjCHADvo^owfhv=UShlUSOq* zLdOEWYsmr%b1h%-{ZjXFqa3J&&gHdtf(-U|=$c^9nw?xV*1J>$hC*d%)3gWFm^dkMP4mHI_}|o!BK?;d|!h+-8T$rHpQv z(n*T>%B^mLapO0HU$*seiWX#z8pc+;M|H8uEPEUw+U=C{OWUgu4`Ovu;bCgF2QQ5oqmoHAibIskJ%2Uqx0GbSi%!9RbKM%{^ z6d!Y;ty?m_gLZ*tJ*dwzId|`L4Vot(N>Xzh*t2t6q08)F`SIGMF?m3kWe?WyPva%2 zSQcIoIS_hjJDvk+$Bvb2UG0HKG8$??5d$? zOVS?Xe7Om17B~LhvVDE?q;`=A4~)&}4u&6xto1f=%GZsbho}sm#c!Q%Wl+^O`w?lR zM%DBCEU0vU|C2E5UD5xYFvj=*#x#5L%!((WMn+Pr>k` z1owz{ZQMI2IXC?z;|(hPx7_ME>Z)xSr8PB2j|EjV#(#V-1aLr8e{`Pgu3kPowg!pE z#kqj}2kR}C!4@L^@yUa1jqY`5(kXj(f{&s|W23>qIEl~^9HBMPglH)^4nyPRpF|xe z%~X#ltxfGY3w`y};+YmUsRj;MLbBqd7%_p=XNo}j0mNz?Iq&6spkUVH?@{5Ly)JVpc&Eq@wU(_`5pJHq_ zb;N!KdT)%!GRw4f*$Oi{c_ZaUd{Uy@Z^-A-v5h@BVE}E^5$#DG{011(AazsSq)gJn zN;0SbbwfuM$g-K@6*yVxy>~`iGsQcvc-A874-{{_ZDW4z<{}J4mac$ zV}+(fmypT;v-wR=QWvuCffES(#qVuvINa5|tO-?nsSP|Sv>Vtv+#5$f@unhwQzpmA ziZuvQ1GSyrx$V-p)sP|2`>ehwB|1Y$zzQnh=;m$KqEcm0dc3$HlfMvCs4#W}Cs+jR zS^irag0%PUfL60PJAv}3+K8PSry(J?Je$`tT6GcllOuk!gWuT?JM<2=viVv!g93d% zO%gJX5(dF5?OLZABHSK>#)QQ(^+|W%KV;&Fv3%cM!&B?_am<$38I`U1r210ha?4mr zpcOBob2nkt*Gs`^Y&F^62aw&xkR`CPSgMw_VOFSy$^a{&xggi=| zwybV%58pNUXc%Sw1t6KAqtddpbBvkhwIk1Tf zb7KSC=tT8DG61}w18)0&&br{d|C#l`q5qM)07k18R0`31f5_Z8SO@FkX%?nb!j}(P z=gtB??M0(YoMKCy1MdADzca_wIiP|4|XR2C`p?n2aS4`5$6x1&70#q#GeGoE4h?hwz^jR~7qbjMwZ3a*P8r zwjv7N{r6UUjiLB!Z2zPBZ?j8FhNu5J82V;2)s$zk+{CWSm9@OiT7sN&!p7gZ~6o{{(RDe*pigz3fuJ$^}^ezXP%t&C;v( z3Q7TMaP9vF_6E`$_X-dfl0n(^e}XauVB;@nXx#h%4bZF|{x#+m(dxhByK(~ka_6j< zbgV7TI4_6X{1K`)67!n|)|%(I^F&^>w^8PMl>*bSWN4ee>mu!3lW0J5L>`UXtiKT~ z%GXG_T1MDD;>nafsQ4GDHYn;SK;1r~&Ge~pHp{Sv0_%{`^qFE_aNiu7FJ`wUQEkOy8nl5ydtW>eo+``r6sKp7|4omZ>ts^dhSA+-#Dp0k||w=guTmh+ce90_lJxzD&p8)*w>kO z6!Lv%WroAo(WkZXr&LUNWb-e8b(bTkX~AauDK|v}IoYe8;Wv_G<;^B}Ci9k3k` zDP4Yl2+$6R5KiB<`XWUp3+_qe*xBuj=64mTx6tMVRu z`-cpvYvvyVje1>#;tRHLj~vV`A&|C+Dv04~hLYCFPY*na@&d#jskk5P<5{JeODUv* zU$&`YSe|F13iBo$obL`Z2J|X2tvGK_FVBM|-)YnTA*&Hv2@n2{e>jwn(b4ZY@P&aJ z?FfOTu17v**%!?JdnZ)L40n|=;`Pd6up9HZh1Oaka+8)PjyLO;5&K%0B0v!PR=n_T zig7I7K=?3f`jd1CM`_+r{pO=dOEz<3znYzq$Q3>>If|u@0ErHiP>s~9>%V`bWYA1D zr^4lE0z=23TDNoeA59ijcUHg}Y}0)l_&f^YQ; zdJ5i@QN{xlsSd*0SI9f$e#!+(WuRxRZ~q|+9_eTdL_h%&hi8hzzI()Y!2OWt(Vu$r zJt~yOxR~};idp7VV~q@dMZB(OdY5F;`Hly;TgBYCRMp9Lt|4S={`kPKp!<&5R>4=M z>xz=OD)isooNR@EXTr_cM=e^Kxd~plxA%2A74I&4>PkVS^t|agiJHqfRvwST3_f?Z zq|k^<$Ad@g2?tH!Rg8*m9*G{?E zHW6^^Rin4;k(XtW0G;8I$5Ip1#T?(MtY9Tlh8ueOd0SHNnIV=gA&%pQuTy5iYc|~> zSRogDcVSVB1klA+@A9Zq+q_^INwp;(ic0vF2>>?OgaFMPMg*>TpF z-H5QceX(K{v=V~XwxE?{oZG9KCM9OQ#aE{jKb<*omfk#k-fWb3BYvww7%M;fU1+L< zA5%ODwz~1c^zDp$J%QerNv9j!45BI=+5kF8ebjcE>wAj>As(o~Ur~EKKZYu-%rq+n(%m&GFfidFQ4NZ10-T?4m+) z{SP8$X1d0qhtfSuPc|_%^CJb5)zNi1>Qf@!Kh{w79`Aoz$>n!v4mI*-O%Bk^EWktf zo14dX{QI`>5jc7^cL=&UT6r`k!n{?Gk%J5C>mNSCQl>>2*j8X^TQday-l2u-=(%A+ zT_bT=JrWFm$+)BCKM(yO>(^Iw{T%l>vQdb$k^AhXl_EL4C26qu>N{S>@iId4A5u{*ccyGgg#k5b6)BtnzAjDVuD`K)}Ohqcr;*S0?3zijpLSI9^UHN3ale}DUA<-P@EokBj=sunxo9e3># zITac<{!_>C(wFHP9!M0t)9@qT4?#HhWtx*ALB@$HMnxYv>rUpKE7N9PnpjVcSy;}86+0Qi%0*1+| zF8rg$KE7OEXu#;T^4VwDtAaQ+r>ocW8=~cOSz1>)KF*`=TCyrXj!~qz{YlsTJ@mI@khc>nD|BC3XCr z;x4nXL`h6jk!4@w^z?!HoygaN7POB)yZE@!`$wxM6*=nGOce-CvAG50eWBH^`#66f z1bPf+^=Rfm%Wgi^YdN4=U18-evgzu!(F{W+;y4*&1E+GUr?cO2jY=PKgiRO+FhQ0o zR$43-tDN6$Di&(AF2$&KRZqDR->Sx@Kf0wf-h^Sj{$Ri&HC8%9wyeqa-sQH$IQsF9 z-e?C~Ew#39?PEsEa^6fL_b%lp&;ZoyF=9DT2bGX8^?JNCePK;p;8evo@_M^I;eFUm zr+wG`x`nE1zE|YHOl8A;pOt$MsOh$UQtH%tRcNTClL{&TO>^C~9apHx5A!e0@7?w&ck6!1b$azliW4TLlQ?4SW0xew z+8W>R`1X{(DCK0nGEd*s=zIs3)7NEY+Som2RerO_!gif#*C(z)#y@0Ld-ne}I_C#HbC1vBURFvI`PpZUZWjPP;-^ zDNf-^GkHEQmsS>?_#aQ{k0n#7(?I1gAryGfXK-zTXR{3LiWa)2#qj|40y+7# zn{5K0pO0JDA1lwxo1e+`NynHICOX=M>NG5AN7t$PjY;^L#ZJ8IdmxquFUM)+NmzUR zl7WM@@^Y7N^5G}Ruy^qw#8snFT<(60m3oeM-svLP^m42{-Ie@z@WdFjEyKQU`Bo$- z#Z&N8HFdAaL9GvKW>A!sXE_F}QSCwj0m2-?$tH1-u1@>?7qN!ZoA}y!gHivCKV-8X zC=Zh_+XCpG+U-?Ue5}rU?j!ni8=#^?bc%E7wy61)wY)dg9)0EZGl0eKVRSb0>2J<8 zK)@l6_oLjbO<#aY6hyq3EIxRIRS*LOg&JJOj<+{PlP0V3h7wh?cpssxY(7&7ZW{kw zftAb0%rpwVgwvnkWOomZbZi?-SMw>y4F}hCm!~9295*SeNV#q@-daluOyE1}Hi~y? zUg7v~oYgI|A{Y4lCkVt z9NzA8J5$D6K=P-K1-dxBVm}vWltY>riu~!NyV#2}Bn5pK&&=iNd5+U`@VcoC4&OO( z5SGia+r0gZ>|NjmH6#C(n$YfJ!N|9F2mSC838hIV1U7R*dFK&^m7jmyU(kxBJ&O{j2eHIpd z5JBfQM&&72RZMt)XA5>D^Hs#)oVwA-Z}8o{hxk-CMWiQk!dWFoUpvyF77=) zJLDu6O3O*3XEAlzMbq(L$qs*;WcJ9X1YPnmOg4U&Y$7$KuIJlV<>v5{$=>hjgb%ML z$CJX|+*Z10+dCnrdSbrz|2+N^XI!#5dRFJBxb00??==?g%RPLzOLU*mWLL*EHr~-1 z{`{IbeM`*jn)NBp0;t+kSn=Shi&-T}NV8^M_NlyeVDvEl?U1K2)xlH{tnbvs;0WWb zmp=9el7t_N4P9=^9<@;%w&0DV7cutoeW!+ei{Sm50W@D3quUX$C(3=2QTA)`&3#a~ zTVwVnb{_EqJzur%lg61Ub)!XzMfL!?bU&}jkMU+*Tgqs~+*sxIw6%Ag)0o(lLA02^ zUNr;?pepe%17h7CRrnD^z{CgFIGeIlp6TZ}z?oH; z-5m9Nk~xO%-F|lK!qNi&3lHg{deM%quegAXYuC)5@*bk@!UYHs%1RHzK*Tl`IZ;q} z!AFb65Qjys2i20@R{UqEOE>YcOKzjLFq7JM`mb4J7ds+u+)umY zQgdh}k3^xg161&vw(npC;vQ_4lXqSz-=ZEf8R}toNqQ}7fW4hCG8uP9%UAUE`_xT{ zZ)87#J!hD`IcshPFYt$~Js(gp168^j@B+vLU)*?&?`x^QI)ZK+1mJ<%i;?)hL2SW z%D{c1GmTJF^68g!??AUQOi#7QI?%wuyhAC(ptQV7PsJ@wlJ|~T!GrTz_B<6Vg;Hj} z=3ooq(mb*V_3|J?vzbeBc=TZ{o1kgb08H<;)|_qDv#I&T=ykj;#sq|gxdShGr2p_> zyY*J*1JYaQ_Vq3|M=R1mfaYnh$o-paf!;lB)bD+5x5JY!dwnF2p;2^9o?y1xf4W1x z7d|iViRE^+K8T;@`a`Dsrr>-&_G{>@eRK%+II&GJr0twHzWLPV*JlN)U)Hj%F|F0*&}1b4!vKP8*j=ET zpbrqf*yZ>oQb`3KZQOKV|EqYOy;J681+;*kd52xF_$MM-k8=GD>69OPT}};SHEpZI z!k3v>Rh|26s{J6E*jPC@agRvV&M|?ZlzYy7qfv+heR_2Zaybrncu>>i!cSZKUm7F(JZ-rr16K{@W7D96 zzTD4Y|s4%{vOgJ+T%&*aqUlRPZwT10NzX;THA zUZ{w|g^IM!tcux=5$$%Iu^y&d&#_tY=8vp2c&cbJ`yxH9e)l=mG!NsjCc-IjKYtRHqD^mez@?7 z;`fcjpl^ucq4$pYCB06qH}$Mhp$zx2eDA*n|C(&{nTAP697f>|E`|T%P!8ggB8qm7 zVrit6=cOFbx8T3zqNOrlL?*|cMu~w-wm(%jb(7|sQktsJb}hywJoKZx8^Y4A!e^oz zCCngcLVxZ8e~51JXpS;G$D-e>Bf4|Aat1v6Ano&%j-wfymHGIhP-eeHXdP`am)XO` zJHm$_+qQ2@4u?HyW}2go1piumQ<`f6N*zRc^EccCe!g|XV1c9TwY9ipU+^)ra*U^*Kww?tc<2Yz z9(dMTzCVv1H|pFa}JM#e|J82&{q0UsGXYxg~yYKos~ZPXg#LN7EAZJkGWvW{T6 ze?T^+&U2|2dLxRtT`H@VEuUU#t|L^P99)VPCC`gm9~PxnMkdwKg0h}OHA7x!rI2B@*xC!bX0cR4fBAu*3#7jyY$X7NK) zpKfFeC@#75%pqE=ekXR#1XcP1Lbwx{Z@CT+dP)%=1%0{)Y|!{B_?+ida=4_=nU!k_ zbS!Em?oHl47N7sN{U?&A|Ke^UG6Le}^*o>*0c}nW(@R0!U)^_;hGdEJmqt`98EWP` z`g_P{a8@}*(O!M~z~G&-+>M}_DysUVvax+&QBOW)<*sFb$D@GW^E|cOG?gJ1bWATY zR_Axw(OUbSzmw5P<>Rq{;%Q5YaYW_rItxFPhAACYxTMTJu2|N^L4W9( zXPzBYSC}AH$Lq4fNd&zY2`bd*PHdZBuP46#im~jyO5e2F-;mHgnHm%1FlI6-{S>8n zkY=Km6}~j%8LQgR19fv<=JU5c7+C}T5BZ`!h7aY_LhgTA3x&Q}sS`4kKRPUAN%j_+YfI*Wxx}>J1JX*4 zsE2hTohcWEz}{Nj0#69Gxy6|bg|la$)u0MLpDIl}!y6eL=08maU$U4kA@?1WI!d)W z|MvESiTjMz>jnIqlv=Lxle!zWs)D-su`gN6S=rq`jV!(JAe)(xh$x!>^mSfb^>@j> zt=MhT=M#$8t2v*5M1>8yo?mA9UZjWF{e&+Xre}^G?yc-C^$#{&F(!0BN>6!Q*>A16 zl3&xYx%hfPKWX$<{Q-OQORX2xKQLI5j~1yc0Jbl>>(F0aLF{Yq9w}YJifB(8ixLu| zXo~m;ySq03kactp?TLwO<}?-~!Hst}67MD$=#OF)Mrb%~NGlVmN2d=BQ^b&T?OV3i zRpgEE)%4_<{-o5*%MvL~?=umZR&UjY8>%BZ;jjRVwpv(` zYDKZv`slUGf^w-hmZ}VO_T@j+{5F9W2KXSnkSQFe76~!$$sG@DbO`R!gbP=M(JzVT zIp&w(Iy55{lJcm?#ub@?w^bswm3k0WY;jfGm)!dAlccsg<6JHFtvB>T=k%o@8?reqZAIpl7cB}3^+1oIbo=kt4xpc2T8 zn>JJKdWnc}^$h#fYWH$x*8^+>yVr)uh)8{crrSDD8CRWV7T1=&<6&Nt3>u;LEoL)S;#wXPjC$&01*Z($s8F;}tlFV*uh zzs(6*DV`z#M>qY_+IPLUF@fOWnyKDT^sXLTE7pKTwKG0F{*3p;KV-+v?CpTE!E_P6qjI$hSMpmy7P$SGI->|FyTO8d@aU)!;G zn?>+H4j;cyZMOXxTDx)IEZH+`6q>CMbZH<+K7BAJOk1_6SL2P~Gp+l$W=VNfVj@tK zR3r7k65Ltm^WAV#1Z4}-H1173^f-(NnTFsclzfQ>$@)k)DTtYDP=(nO zej;V9o2Q;ZU5g>!54M(Pn-cg%rYkB~_EweD;A^8~Iz9Vrdm&4?Wn*AQy#9IaB)@|o z)+o4BL0gcO-cxxp=5x-(%`|1gCw-|>c>X7+$KyypBj+$l7W`S*b<@n=w)Gzi*Shk+ zX(iULDZw?SgLX<&NskmS+X--drKSI+Q#Hn~J!hzNX~aR`C4Xdikyi0*>q4n5z>App z7?Gs8aem3=MGF=2U*8i0`|HGMt|v4?oDD9VGx_!$;)}H5D+0ITo%wAKuiIWvFGv_6lhDu| zBWwy1_^cY2&g(b7%u;=f`$JZawA&Zkzr@RDQ8cadY`UmbXrpH)r8nwB1bi#X)|Ik>M7{uQv`D{L{_~iU416QwZR11Id#&^xJ^$oOo4qy_ zh6d0e($+Cce9x$$86dw)avbYHmZgr|B@9a>#2pYc=t43L=Tc4aUfTuHvbG>*iQ}^PvS7F7p z=whpwOg(o-nwe!uh0nOt1Qzfe$l;9D4LlQLBKV1!BAQA(F?q2+vF6@w(Is+Cmp^2y zVi(?-f9_G|Cq1+IGg>|2^=)&num3P|-I_l3*S{MQ(N(DK(ZCCDTOTlg4`+)JwEFX8)yb0aLBeXSR%I8yy(^FP+tZRO6$EaRosNNdLzQ$aAi@6ED`CKxr_QSY^ zwNnoK^B=N!#jP~z7F8@!zgN9`vX1%3&;A0vFE5?j1U(yzK8ZEPeyuPG*k0%8a>7&} zTSC~5+0mAFL;zM**P{+K{72Zi>$yF~wd}l8UpOl^ISriYo^&u%CvbkcLvVIo-V7>u zXogRZgB!yx`RccN$Ry|g&aXZpQB)8SOUbvF7bc36mrZj?FBfEkP{X=;{eQ?9Dy!vL z)y+Ce9u|XJdpl~f(D9~~6Jp+GjVQmVesz!N=F@1CtiDNeIWs%)x1RiO2~!Yr48Hf_ zA%ic6_r1me6qBH+lyAYqfZp=Zv{;zYmUBU|fbgV0auGPv**OBXT}ce)$uTAxO!y9T zHu}4ZtwdJMB#)GMUHF#E{}I3WL)KyfAU|lVufo!2@-pc^N5(w<2>uwn&ByDoZb&P` zWNu*phfH>e>BL`Cuv0nylOgaW{b##QFvX6k4qoED^3UCY41v)fKVokuL$`kE%{1}- zaJxg9tpuN0H&a?@tm0C^9TfSe6l;`R85ZYrc2gYV7FpbEEnDBPgn7iG+(gUHu+y5O z%ho`h3N5*9MR6Y^uQeMl+1fYKSEfQFie$X?*J@uo){hEh-HHuiDKQ%|RD6}aSD;~w zHI{luVlz>%_Zwaeppx8nS*Ep}+F`h7*oSz(Ko5CrT(ns)c%|m&&gZnBUbAH`ybiZI zOD60jvsyg0ZVE1#%PaSZi3^W|=VD{EB(pOz(T)KhkwS>r(eoV_+bZxp<+?2U80X)o zH^tNa#2=h4eHnoPnzb?IZ7jw(W$;R)T7bGhypDxq)q((lenohQGX#=vrqY3x5YMC1 zi|aHz)hgt5xPRw7F92N|sc*1|(^5Bu3^bJ0q0drG{g8Ht)maIb6ze1LMm&MOHUBqxK8aG3%&J6MLU~j?yzy zMLZ`dU5|ehLBFo?HB`0o-*`awG}9;6$nWQ!>ql#_y42H6$$}bO;_`%;l)A_$e>*%} z{) z0)d^f9K>1_n8r5Ra&d2m7(n#)^&TBaV!Vn(ckh^k)CeZG z#FQ{xnKF}u;?*e2(0OkBeA}6NxWbvdhH^A*e;?V#6ZHP@(i_-YimcQ+X-wCCy|oI% z84Ac53%0>Ikl|*P_deRhl*fn1ej0d|l&jlB=$)3-NO!A_0Sn_S9N*_#&mnXOy>lVr ziJ6plUC_L1z*vJ5Pf*UCzQ0!M?CFJ4ZJ!eSLT0(Zj1`&Za&5@6xr~eW=Td~VY&$dX z51FORV2WFjXh|7q%_1kJ?(l>x8p!;j)aSQb@7Nbb0dDrf+DNJi?IRU}%*CyUQzX?l zKLbGAO3cE|=S{P$2Mj|)d49hrcBNm? z3~}t3nVDl|h%qsMeSiRq@Tssa)TE)J)-TGT;yHAG5wbmf!W;_+P0i+E&*ZTaG%z zH7WP&Xq(Nh*4NGL6=PV|udtjg2ay|W3904TSYf=2&eL1e>~}nt9;}?!Dm-LRtZcm5 zEGHJMoOENYVnY2@m+Fz?mrxC!J^2lRaq}%q*tgM___d1J_Hwsv8}|(Bxp$cGG%s8J znu==vJ_>5$`vz5Q293BzYb5J(#{3M@DZ|+beW8-^_Fh@^C!|q3E}ts)-KOp+$F@7x!5O1$W~z?jxpR{De5043)D`tYwH4z| zyI+tPA?y2vAL~u_5}jvP*kl=IV)ja28`Oc2l2s854a7NG7v)*tt~yR85K>=;P* zcacA7$5Nv&iRH4>JGz_XT1itfXjw4i6t@LA!<(hU*L0G%M^1AxQjFa15p!S>X z5F#}wHh*wE!{8RR6XyQcP1Z9e!?_H7;-risN$|tcAyu@ijwb-qtft&&oy)6Ka-o*C z4AE*}!?2>t{=Hk(N0~Oxwx2c+o9!uM)Z1NuAl>Ptsu@%Q zS%N%jCkk3Z-T`h_qlWh6(^o9>2q>d3Y@GJeOi;%q<4dv_=*mxirW$Hms3QkU7z%8+Br z^XN*=`h9z+(6#_arHtak$4DCzf&;YDoo8wK!c3ETvy(-(i-Io{C6*%uXDYYfj<<5{ zD4Lmw53A1&*e!K+CT7O;P@{9xj>fsuDQp1Q1kZOQN5ZJ!=pmaI-e-05UdzU*ujW`$ z-x1Dhl2#+#_V;uP1eqohm+p}}Ew$gKLrw@CsL6j_czQ|P#ZZKGokQ~XuV5+HfSu+h zsUS&1QDqUOk3pm6;+sNK!(}ykACAj41qz-nDE*zS1_&kBb&7* zI_+_rK3~rh)ilgPa_sglHss(+rh(8YSv_klvrL>Lmz76`=0`fEkLzURYnOF!ps&fZ zt`Y?dBh$5|^7#`u3*mFKz~KH_Hb7$Hv^#oNrXKSs2o`dsxVXOy(!gID#LaMU0uJ(Q5*JIAh0Ve_O`%{G( zU(#3bS}FUx^5ObBG!XU~FC_6VbHl;Znt`_)orl+yF;BMReWilli@=i=b#O44M#i(l zF5D#|##dmfO1+=QC-qPw_g{=RL`47#HiKpbXFEw|Az{wP7;s2-e4^(HCQVN^^fBN_ zvt@U!z@0PY2PD>X`5HBwt^JkTdWRGq&dvN?l??8AoTQ{5p-%iv9!-I{GI59`Hy>Lw z5<=)^3wlGny456EnXWoldO-ts?XsiQ1)GGsI@uJP#H)1pfO@LsZT%ZY?A$(E8~ZrY z_PW~Asa0Ffz3R|rLm6;svRz~R`u)fv66@-$T+{ZsFC6fY>L~@DTqWIBt|i)Puqblx zm`M6zGHIiLbIUka&3auE%QVBBd@n_PE6=fAto@F_cFkZvLM04A=e2v{O+^u`7{LHeJ2fUd zuk?zMi_QL=AW(-Pc!xeD-u>UokM%j)^+?rP*jx4>ejdlcbGn`_%SyfGb<^O>YMphn-N$iDGLJYqFR_yB`P4Ww(?UGE zx))fey#)+!cXsahCSJmy-%a-FH<6A0<*3(u8fAZIS;qq zWz6`-;^0;mawACXpnTs6@<}YZahad7BKFKobJbu%px-T>o z`A(e}DC(%rm6j@{h3DJ-s#krsgL+H@)Y}iXJ}>oDhrt~vIrKR*y&Om_^BTN!9S@P3Db6`Y)m+;IbjF1yr> zMb%^E?YO00UU=|!ISF_@A#al*^Q83QrOQ6kJOidZ@2z(6E7xwTpumRN4$K{pb{dhI z9-6KXo5Pm5AukD6HZ7g&8*mA8$2D~>iBzg@iQE524g|_{C=w58`MkA#6ScqFrlCEo zX$UMxS1s?lmAfyC>c}ulpK0REx5RcQyCQY*YM}HDitdd2>%gXEre8um*dm|*06l%M zK@z@}v2ULmM3JFF*BiF&u0Uh<1!%Md)#2hzt55&3hRU0UDXkk<;2!aGA+ci!rwYz5lF__EUyD zOpmPLNl+k5y2a5O&L1Fo4@T36` zo?tZcXYkZB+2Ae@w{R&-h_&cZT_wtam@JOx`II4YX^4PYj*7dxGu=Tjp`^uKf5-0g z2BnrjKYmEO;no^>&b47O`_gf7_wd1IpI0)mWocaoiDbnPrVfeM2D`evc#8Gusa@7v zBvz6cfDeCuu@<;ezFK-$ruuPZgkv{_w`}j|fh1n9AoOYuDQ4VwQf1hf% zt$XBA_P7!>A?VVn_4PSj8iya50D{d);HcF}nH{ z*!?B^E~0}=J@dpDp=EH#V+8Jakp6T$RSgH;FlKu^)gi1qhP4C4AQ95@CAr@aT~ogy zzCKHy`oc(}zHoUmhx1#%Oua`Hrj-{rT$|RxdTB$ zi&{pE^-3G>k?OufV%#=x#o)n9X;L2OLBLYwJ&9!H{zcD`e@x&MR6_(m>|F+wzdu$F zc53{R2=#Ddd08tT4SIXoIR?OTSmQxk=Fd2-pQU^vviBE7c(i z#HI@*X9mue9civOz4>0dd&!piUmVDg{0}p$V&BT1e%<*@X52(K6c%Gn`yLJ&hBd|Z zf&?kC@d8)&KB_uQ98J5P+Ww*)dcNLHs+wP(<#RQnXK3&TpRm;(pTfd+*ulOaZ%m9O zckSL{E1j3Mbr~GFD(}Eu0SB{;itXb-D{qS8dEzd0s&ft2&SxOk4BxWUtEJ@*-0>O57(IEKajPXM3A%0m@z%|9>I(lK zO<$(2IU_dKd}z=v>OriPa{?ceeH&a&@k}-=h;g5&ZCeZ~6oMM0Ln-TeDGv*|tSy?g z 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 { - const fs = require('fs'); - const path = require('path'); - const campLocationData = require('../data/camp-location.json'); - + 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 => { + campLocationData.camps.forEach((camp) => { if (camp.image) { imagePaths.push({ - type: 'Camp', + type: "Camp", name: camp.title, path: camp.image, - exists: fs.existsSync(path.join(__dirname, '../public', camp.image)) + exists: fs.existsSync(path.join(__dirname, "../public", camp.image)), }); } }); } - + // Locations images if (campLocationData.locations) { - campLocationData.locations.forEach(location => { + campLocationData.locations.forEach((location) => { if (location.imageSrc) { imagePaths.push({ - type: 'Location', + type: "Location", name: location.title, path: location.imageSrc, - exists: fs.existsSync(path.join(__dirname, '../public', location.imageSrc)) + exists: fs.existsSync( + path.join(__dirname, "../public", location.imageSrc), + ), }); } - + // Program images if (location.programOptions) { - location.programOptions.forEach(program => { + location.programOptions.forEach((program) => { if (program.imageSrc) { imagePaths.push({ - type: 'Program', + type: "Program", name: program.title, path: program.imageSrc, - exists: fs.existsSync(path.join(__dirname, '../public', program.imageSrc)) + exists: fs.existsSync( + path.join(__dirname, "../public", program.imageSrc), + ), }); } }); } }); } - - res.render('admin/test-images', { - layout: 'layouts/admin', - title: 'Test Image Paths', + + res.render("admin/test-images", { + layout: "layouts/admin", + title: "Test Image Paths", images: imagePaths, - user: req.session.user + user: req.session.user, }); }); diff --git a/routes/index.js b/routes/index.js index beecd84..a22ea19 100644 --- a/routes/index.js +++ b/routes/index.js @@ -13,12 +13,14 @@ const safetyController = require("../controllers/safetyController"); const campLocationController = require("../controllers/campLocationController"); // Booking flow removed -const insuranceController= require("../controllers/insuranceController"); +const insuranceController = require("../controllers/insuranceController"); const termsController = require("../controllers/termsController"); // <-- IMPORT ĐÃ CÓ const activityController = require("../controllers/activityController"); const travelController = require("../controllers/travelController"); const bookingSubmissionController = require("../controllers/bookingSubmissionController"); +const serviceController = require("../controllers/serviceController"); + // Trang chủ router.get("/", (req, res) => { res.render("index", { @@ -61,8 +63,7 @@ router.get("/api/activities/:id", activityController.apiDetail); router.get("/api/camp-location", campLocationController.api); // Booking routes removed // Insurance APi route -router.get("/api/insurance", insuranceController.api) - +router.get("/api/insurance", insuranceController.api); router.get("/api/terms", termsController.api); @@ -71,14 +72,14 @@ router.get("/travel", async (req, res) => { try { const Travel = require("../models/travel"); const travel = await Travel.findOne(); - + if (!travel) { return res.status(404).render("errors/404", { title: "Page Not Found", message: "Travel information not found", }); } - + res.render("page/travel", { title: travel.page.title, data: travel.toObject(), @@ -95,33 +96,58 @@ router.get("/api/travel", travelController.api); // Booking submission APIs (public endpoints) router.post("/api/booking/submit", bookingSubmissionController.submitBooking); -router.get("/api/activity/:activityId/sessions", bookingSubmissionController.getAvailableSessions); -router.get("/api/activity/:activityId/session/:sessionId/availability", bookingSubmissionController.getSessionAvailability); +router.get( + "/api/activity/:activityId/sessions", + bookingSubmissionController.getAvailableSessions, +); +router.get( + "/api/activity/:activityId/session/:sessionId/availability", + bookingSubmissionController.getSessionAvailability, +); // New API for creating bookings directly into camp sessions (by program) router.post( "/api/camps/:program/sessions/:sessionId/bookings", - activityController.createSessionBookingByProgram + activityController.createSessionBookingByProgram, ); router.get( "/api/camps/:program/sessions/:sessionId/bookings", - activityController.getSessionBookingsByProgram + activityController.getSessionBookingsByProgram, ); // Keep admin-style update/delete by activityId (protected) if needed -router.put("/api/camps/:activityId/sessions/:sessionId/bookings/:bookingId", activityController.updateSessionBooking); -router.delete("/api/camps/:activityId/sessions/:sessionId/bookings/:bookingId", activityController.deleteSessionBooking); +router.put( + "/api/camps/:activityId/sessions/:sessionId/bookings/:bookingId", + activityController.updateSessionBooking, +); +router.delete( + "/api/camps/:activityId/sessions/:sessionId/bookings/:bookingId", + activityController.deleteSessionBooking, +); // Demo booking form router.get("/demo/booking-form", (req, res) => { - res.sendFile(path.join(__dirname, '../views/demo/booking-form.html')); + res.sendFile(path.join(__dirname, "../views/demo/booking-form.html")); }); // Demo session booking API router.get("/demo/session-booking-api", (req, res) => { - res.sendFile(path.join(__dirname, '../views/demo/session-booking-api.html')); + res.sendFile(path.join(__dirname, "../views/demo/session-booking-api.html")); }); // // API route cho blog detail // router.get('/api/blog-detail', blogDetailController.api); +/* CMS - Hailearning + */ +// service +router.get("/service", serviceController.index); +router.post("/service", serviceController.update); +router.get("/api/service", serviceController.api); + +// Service details by slug +router.get("/api/service/:slug", serviceController.getServiceBySlug); + +// Service slugs list +router.get("/api/service-slugs", serviceController.getServiceSlugs); + module.exports = router; diff --git a/scripts/2026_02_02_131615_service.js b/scripts/2026_02_02_131615_service.js new file mode 100644 index 0000000..af24f29 --- /dev/null +++ b/scripts/2026_02_02_131615_service.js @@ -0,0 +1,186 @@ +require("dotenv").config(); +const fs = require("fs").promises; +const path = require("path"); +const mongoose = require("mongoose"); + +const connectDB = require("../config/database"); +const Service = require("../models/service"); + +/** + * Transform service.json data to match Service schema + */ +function transformServiceData(sourceData) { + return { + pageTitle: sourceData.pageTitle || "", + + // Breadcrumb navigation section + breadcrumb: { + title: sourceData?.breadcrumb?.title || "", + backgroundImage: sourceData?.breadcrumb?.backgroundImage || "", + shape: sourceData?.breadcrumb?.shape || "", + items: Array.isArray(sourceData?.breadcrumb?.items) + ? sourceData.breadcrumb.items.map((item) => ({ + label: item.label || "", + href: item.href || "", + })) + : [], + }, + + // Main services section + services: { + title: { + subTitle: sourceData?.services?.title?.subTitle || "", + mainTitle: sourceData?.services?.title?.mainTitle || "", + }, + items: Array.isArray(sourceData?.services?.items) + ? sourceData.services.items.map((service) => ({ + slug: service.slug || "", + name: service.name || "", + description: service.description || "", + image: service.image || "", + layout: service.layout || "", + details: { + title: service.details?.title || "", + description: service.details?.description || "", + mainImage: service.details?.mainImage || "", + overviewTitle: service.details?.overviewTitle || "", + overviewDescription: service.details?.overviewDescription || "", + additionalDescription: + service.details?.additionalDescription || "", + keyFeaturesTitle: service.details?.keyFeaturesTitle || "", + keyFeaturesImage: service.details?.keyFeaturesImage || "", + features: Array.isArray(service.details?.features) + ? service.details.features.map((feature) => ({ + icon: feature.icon || "", + title: feature.title || "", + description: feature.description || "", + })) + : [], + faqTitle: service.details?.faqTitle || "", + faqImage: service.details?.faqImage || "", + faq: Array.isArray(service.details?.faq) + ? service.details.faq.map((faqItem) => ({ + id: faqItem.id || "", + question: faqItem.question || "", + answer: faqItem.answer || "", + isExpanded: faqItem.isExpanded || false, + })) + : [], + }, + })) + : [], + }, + + // Destination countries section + destinations: { + backgroundImage: sourceData?.destinations?.backgroundImage || "", + title: { + subTitle: sourceData?.destinations?.title?.subTitle || "", + mainTitle: sourceData?.destinations?.title?.mainTitle || "", + }, + items: Array.isArray(sourceData?.destinations?.items) + ? sourceData.destinations.items.map((country) => ({ + id: country.id || "", + name: country.name || "", + description: country.description || "", + image: country.image || "", + icon: country.icon || "", + link: country.link || "", + })) + : [], + }, + + // Visa types section + visas: { + items: Array.isArray(sourceData?.visas?.items) + ? sourceData.visas.items.map((visa) => ({ + id: visa.id || "", + number: visa.number || "", + name: visa.name || "", + description: visa.description || "", + buttonText: visa.buttonText || "", + buttonLink: visa.buttonLink || "", + })) + : [], + }, + + // Client reviews section + reviews: { + title: { + subTitle: sourceData?.reviews?.title?.subTitle || "", + mainTitle: sourceData?.reviews?.title?.mainTitle || "", + }, + viewAllButton: { + text: sourceData?.reviews?.viewAllButton?.text || "", + icon: sourceData?.reviews?.viewAllButton?.icon || "", + link: sourceData?.reviews?.viewAllButton?.link || "", + }, + thumb: sourceData?.reviews?.thumb || "", + items: Array.isArray(sourceData?.reviews?.items) + ? sourceData.reviews.items.map((review) => ({ + id: review.id || "", + rating: review.rating || 5, + content: review.content || "", + author: { + name: review.author?.name || "", + type: review.author?.type || "", + }, + icon: review.icon || "", + })) + : [], + navigation: { + prevButton: sourceData?.reviews?.navigation?.prevButton || "", + nextButton: sourceData?.reviews?.navigation?.nextButton || "", + prevIcon: sourceData?.reviews?.navigation?.prevIcon || "", + nextIcon: sourceData?.reviews?.navigation?.nextIcon || "", + }, + }, + + updatedAt: new Date(), + }; +} + +/** + * Migration function for service page data + */ +async function migrateServiceData() { + try { + await connectDB(); + console.log("🚀 Starting service page migration..."); + + // Clear existing service documents + await Service.deleteMany({}); + console.log("🗑️ Cleared existing service documents"); + + // Read service.json file + const serviceJsonPath = path.join(__dirname, "..", "data", "service.json"); + const rawJsonData = await fs.readFile(serviceJsonPath, "utf8"); + const sourceServiceData = JSON.parse(rawJsonData); + + // Transform data to match schema + const transformedServiceData = transformServiceData(sourceServiceData); + + // Create new service document + const newService = new Service(transformedServiceData); + const savedService = await newService.save(); + + console.log("✅ Service page migration completed successfully!"); + console.log(`📄 Service document ID: ${savedService._id}`); + + await mongoose.disconnect(); + process.exit(0); + } catch (error) { + console.error("❌ Service migration error:", error); + process.exit(1); + } +} + +// Run migration if called directly +if (require.main === module) { + migrateServiceData(); +} + +module.exports = { + migrate: migrateServiceData, + transformServiceData, +}; diff --git a/server.js b/server.js index 24d4a0c..8b1dda4 100644 --- a/server.js +++ b/server.js @@ -42,7 +42,21 @@ app.use( }, express.static(path.join(__dirname, "assets")), ); +app.use("/img", express.static(path.join(process.cwd(), "public/img"))); +// Serve static files from public directory (uploads, etc.) +app.use( + "/uploads", + (req, res, next) => { + // Cho phép mọi domain truy cập tài nguyên tĩnh + res.header("Access-Control-Allow-Origin", "*"); + res.header("Access-Control-Allow-Methods", "GET"); + next(); + }, + express.static(path.join(__dirname, "public", "uploads")), +); +// Serve other public files +app.use(express.static(path.join(__dirname, "public"))); // Session configuration app.use( session({ diff --git a/services/service.service.js b/services/service.service.js new file mode 100644 index 0000000..64483a6 --- /dev/null +++ b/services/service.service.js @@ -0,0 +1,43 @@ +const Service = require("../models/service"); + +const getServiceData = async () => { + const service = await Service.findOne().sort({ updatedAt: -1 }); + console.log("check layout", service.services.items.layout); + + if (!service) { + return { + pageTitle: "", + services: { + title: { + subTitle: "", + mainTitle: "", + }, + items: [], + }, + destinations: { + backgroundImage: "", + title: { + subTitle: "", + mainTitle: "", + }, + }, + visas: { + items: [], + }, + reviews: { + title: { + subTitle: "", + mainTitle: "", + }, + thumb: "", + items: [], + }, + }; + } + + return service; +}; + +module.exports = { + getServiceData, +}; diff --git a/utils/imageHelper.js b/utils/imageHelper.js index b772b1d..bce7697 100644 --- a/utils/imageHelper.js +++ b/utils/imageHelper.js @@ -1,37 +1,68 @@ /** * Thêm BACKEND_URL vào đường dẫn hình ảnh - * @param {Object} data - Dữ liệu cần xử lý + * @param {Object} data - Dữ liệu cần xử lý * @returns {Object} - Dữ liệu đã được xử lý với đường dẫn hình ảnh đầy đủ */ function addBaseUrlToImages(data, baseUrl) { // baseUrl can be passed explicitly (e.g., from req), otherwise fall back to env - const BACKEND_URL = baseUrl || process.env.BACKEND_URL || ''; - + const BACKEND_URL = baseUrl || process.env.BACKEND_URL || ""; + // Tạo bản sao sâu để tránh thay đổi dữ liệu gốc const processedData = JSON.parse(JSON.stringify(data)); - + // Hàm đệ quy để xử lý tất cả các URL hình ảnh trong đối tượng const processObject = (obj) => { - if (!obj || typeof obj !== 'object') return; - - Object.keys(obj).forEach(key => { + if (!obj || typeof obj !== "object") return; + + Object.keys(obj).forEach((key) => { // Kiểm tra nếu thuộc tính chứa đường dẫn hình ảnh bắt đầu bằng /uploads/ - if (typeof obj[key] === 'string' && obj[key].startsWith('/uploads/')) { + if (typeof obj[key] === "string" && obj[key].startsWith("/uploads/")) { // Thêm BACKEND_URL nếu đường dẫn chưa có http - if (!obj[key].startsWith('http')) { + if (!obj[key].startsWith("http")) { obj[key] = `${BACKEND_URL}${obj[key]}`; } - } else if (typeof obj[key] === 'object') { + } else if (typeof obj[key] === "object") { // Đệ quy xử lý các đối tượng và mảng lồng nhau processObject(obj[key]); } }); }; - + processObject(processedData); return processedData; } +/** + * Tạo full URL cho ảnh từ đường dẫn tương đối - dùng cho EJS templates + * @param {string} imagePath - Đường dẫn ảnh + * @param {string} backendUrl - Backend URL (optional, sẽ lấy từ env nếu không có) + * @returns {string} - Full URL của ảnh + */ +function getFullImageUrl(imagePath, backendUrl = null) { + if (!imagePath) return ""; + + // Nếu đã là full URL thì return luôn + if (imagePath.startsWith("http")) { + return imagePath; + } + + // Lấy backend URL + const baseUrl = ( + backendUrl || + process.env.BACKEND_URL || + "http://localhost:3001" + ).replace(/\/$/, ""); + + // Xử lý đường dẫn + let imgSrc = imagePath; + if (!imgSrc.startsWith("/")) { + imgSrc = "/" + imgSrc; + } + + return baseUrl + imgSrc; +} + module.exports = { - addBaseUrlToImages -}; \ No newline at end of file + addBaseUrlToImages, + getFullImageUrl, +}; diff --git a/views/admin/dashboard.ejs b/views/admin/dashboard.ejs index 77d6d63..9fb5879 100644 --- a/views/admin/dashboard.ejs +++ b/views/admin/dashboard.ejs @@ -4,16 +4,25 @@

-
Quick Management
+
Quick Management
-
- +
+
Home
@@ -29,9 +38,18 @@
-
- +
+
Header & Menu
@@ -47,9 +65,18 @@
-
- +
+
Footer
@@ -62,14 +89,21 @@
- -
-
- +
+
About Us
@@ -85,9 +119,18 @@
-
- +
+
Contact
@@ -103,9 +146,18 @@
-
- +
+
FAQ
@@ -121,16 +173,28 @@
-
- +
+
Terms & Conditions

Manage terms

- + Edit
@@ -139,9 +203,18 @@
-
- +
+
Travel
@@ -157,9 +230,18 @@
-
- +
+
Safety
@@ -175,16 +257,28 @@
-
- +
+
Camp Location

Manage camp location

- + Edit
@@ -193,9 +287,18 @@
-
- +
+
Activities
@@ -207,7 +310,32 @@
- +
+
+
+
+ +
+
+
Services
+

Manage services

+
+
+ + Edit + +
+
@@ -234,18 +362,37 @@
-
- +
+
Menu Header API
/api/header - GET + + GET + API to get menu header data - + View @@ -253,18 +400,37 @@
-
- +
+
Home API
/api/home - GET + + GET + API to get homepage data - + View @@ -272,18 +438,37 @@
-
- +
+
About API
/api/about - GET + + GET + API to get about page data - + View @@ -291,18 +476,37 @@
-
- +
+
About Us API
/api/about-us - GET + + GET + API to get about us data - + View @@ -310,18 +514,37 @@
-
- +
+
FAQ API
/api/faq - GET + + GET + API to get FAQ data - + View @@ -329,18 +552,37 @@
-
- +
+
Terms & Conditions API
/api/terms - GET + + GET + API to get terms & conditions data - + View @@ -348,18 +590,37 @@
-
- +
+
Travel API
/api/travel - GET + + GET + API to get travel data - + View @@ -367,18 +628,37 @@
-
- +
+
Safety API
/api/safety - GET + + GET + API to get safety data - + View @@ -386,38 +666,76 @@
-
- +
+
Camp Location API
/api/camp-location - GET + + GET + API to get camp location data - + View - +
-
- +
+
Menu Tree API
/api/menu-tree - GET + + GET + API to get menu tree data - + View @@ -425,18 +743,37 @@
-
- +
+
Contact API
/api/contact - GET + + GET + API to get contact data - + View @@ -444,18 +781,75 @@
-
- +
+ +
+ Service API +
+ + /api/service + + GET + + API to get service data + + + View + + + + + +
+
+
Camp Location API
/api/camp-location - GET + + GET + API to get camp location data - + View @@ -468,46 +862,83 @@
-
+
System Information
-
+
-
- +
+
Version
-
CMS-SIMS v1.0.0
+
+ CMS-SIMS v1.0.0 +
- +
-
- +
+
Logged in as
-
<%= user.username %>
+
+ <%= user.username %> +
- - @@ -821,12 +797,12 @@
<% if(typeof success_msg !=='undefined' || typeof error_msg !=='undefined' || typeof error !=='undefined' ) { %> - + <% } %> <%- body %>
@@ -841,14 +817,14 @@
Links
@@ -865,7 +841,7 @@

© <%= new Date().getFullYear() %> CMS-GGCamp. All rights - reserved. + reserved.

@@ -928,7 +904,7 @@ formattedType + ''; if (window.location.pathname.includes("/admin/level") && window.location.search.includes( - "type=" + type)) { + "type=" + type)) { link.classList.add("active"); } From 8ceb5684e44bfb718e57a41443fe9b6cd971e084 Mon Sep 17 00:00:00 2001 From: Wini_Fy Date: Tue, 3 Feb 2026 17:04:54 +0700 Subject: [PATCH 3/3] fix: Improve formatting and spacing in blog edit and index pages --- views/admin/blog/edit.ejs | 242 +++++++++++++++++++------------------ views/admin/blog/index.ejs | 22 ++-- 2 files changed, 137 insertions(+), 127 deletions(-) diff --git a/views/admin/blog/edit.ejs b/views/admin/blog/edit.ejs index 80d46dd..838ed55 100644 --- a/views/admin/blog/edit.ejs +++ b/views/admin/blog/edit.ejs @@ -210,29 +210,31 @@
- -
-
+
<% categories.forEach(category=> { %> -
+
- > + > + for="category_<%= category._id %>"> + <%= category.name %> +
-
<% }); %>
-
Select one or more categories for this blog post.
+
Select one or more categories for this blog post. +
- -
-
+
<% tags.forEach(tag=> { %> -
+
- > - + > +
-
@@ -314,7 +319,8 @@ Mark as Featured Post
-
Featured posts can be highlighted on the blog page.
+
Featured posts can be highlighted on the blog + page.
@@ -371,27 +377,27 @@ try { <% if (blog.content) { %> - const blogContentRaw = <%- JSON.stringify(blog.content) %>; + const blogContentRaw = <% - JSON.stringify(blog.content) %>; if (blogContentRaw) { if (typeof blogContentRaw === 'string' && blogContentRaw.trim()) { // Try to parse as JSON string - try { + try { initialContentData = JSON.parse(blogContentRaw); // Validate it has blocks property if (!initialContentData.blocks || !Array.isArray(initialContentData.blocks)) { throw new Error('Invalid EditorJS format'); } - } catch (e) { + } catch (e) { // If not JSON, convert to EditorJS format - initialContentData = { - blocks: [{ - type: 'paragraph', - data: { + initialContentData = { + blocks: [{ + type: 'paragraph', + data: { text: blogContentRaw - } - }] - }; - } + } + }] + }; + } } else if (typeof blogContentRaw === 'object' && blogContentRaw !== null) { // Already an object, check if it's valid EditorJS format if (blogContentRaw.blocks && Array.isArray(blogContentRaw.blocks)) { @@ -416,27 +422,27 @@ try { <% if (blog.contentAfterQuote) { %> - const blogContentAfterQuoteRaw = <%- JSON.stringify(blog.contentAfterQuote) %>; + const blogContentAfterQuoteRaw = <% - JSON.stringify(blog.contentAfterQuote) %>; if (blogContentAfterQuoteRaw) { if (typeof blogContentAfterQuoteRaw === 'string' && blogContentAfterQuoteRaw.trim()) { // Try to parse as JSON string - try { + try { initialContentAfterQuoteData = JSON.parse(blogContentAfterQuoteRaw); // Validate it has blocks property if (!initialContentAfterQuoteData.blocks || !Array.isArray(initialContentAfterQuoteData.blocks)) { throw new Error('Invalid EditorJS format'); } - } catch (e) { + } catch (e) { // If not JSON, convert to EditorJS format - initialContentAfterQuoteData = { - blocks: [{ - type: 'paragraph', - data: { + initialContentAfterQuoteData = { + blocks: [{ + type: 'paragraph', + data: { text: blogContentAfterQuoteRaw - } - }] - }; - } + } + }] + }; + } } else if (typeof blogContentAfterQuoteRaw === 'object' && blogContentAfterQuoteRaw !== null) { // Already an object, check if it's valid EditorJS format if (blogContentAfterQuoteRaw.blocks && Array.isArray(blogContentAfterQuoteRaw.blocks)) { @@ -461,54 +467,54 @@ // Build tools object, only including plugins that are loaded const tools = { - header: { - class: Header, - config: { - levels: [2, 3, 4], - defaultLevel: 2 - } - }, - paragraph: { - class: Paragraph, - inlineToolbar: true - }, - list: { - class: List, - inlineToolbar: true, - config: { - defaultStyle: 'unordered' - } - }, - image: { - class: Image, - config: { - endpoints: { - byFile: '/admin/upload/image?imageType=blog' - } - } - }, - quote: { - class: Quote, - inlineToolbar: true, - shortcut: 'CMD+SHIFT+O', - config: { - quotePlaceholder: 'Enter a quote', - captionPlaceholder: 'Quote\'s author' - } - }, - marker: { - class: Marker, - shortcut: 'CMD+SHIFT+M' - }, - embed: { - class: Embed, - config: { - services: { - youtube: true, - vimeo: true - } - } + header: { + class: Header, + config: { + levels: [2, 3, 4], + defaultLevel: 2 + } + }, + paragraph: { + class: Paragraph, + inlineToolbar: true + }, + list: { + class: List, + inlineToolbar: true, + config: { + defaultStyle: 'unordered' + } + }, + image: { + class: Image, + config: { + endpoints: { + byFile: '/admin/upload/image?imageType=blog' } + } + }, + quote: { + class: Quote, + inlineToolbar: true, + shortcut: 'CMD+SHIFT+O', + config: { + quotePlaceholder: 'Enter a quote', + captionPlaceholder: 'Quote\'s author' + } + }, + marker: { + class: Marker, + shortcut: 'CMD+SHIFT+M' + }, + embed: { + class: Embed, + config: { + services: { + youtube: true, + vimeo: true + } + } + } }; // Add optional plugins if they're loaded @@ -750,7 +756,7 @@ const newCategoryInput = document.getElementById('newCategoryInput'); const categoriesContainer = document.getElementById('categoriesContainer'); - addCategoryBtn.addEventListener('click', async function() { + addCategoryBtn.addEventListener('click', async function () { const categoryName = newCategoryInput.value.trim(); if (!categoryName) { alert('Please enter a category name'); @@ -815,7 +821,7 @@ }); // Allow Enter key to add category - newCategoryInput.addEventListener('keypress', function(e) { + newCategoryInput.addEventListener('keypress', function (e) { if (e.key === 'Enter') { e.preventDefault(); addCategoryBtn.click(); @@ -827,7 +833,7 @@ const newTagInput = document.getElementById('newTagInput'); const tagsContainer = document.getElementById('tagsContainer'); - addTagBtn.addEventListener('click', async function() { + addTagBtn.addEventListener('click', async function () { const tagName = newTagInput.value.trim(); if (!tagName) { alert('Please enter a tag name'); @@ -891,7 +897,7 @@ }); // Allow Enter key to add tag - newTagInput.addEventListener('keypress', function(e) { + newTagInput.addEventListener('keypress', function (e) { if (e.key === 'Enter') { e.preventDefault(); addTagBtn.click(); @@ -902,8 +908,8 @@ -