const Home = require("../models/home"); const { addBaseUrlToImages } = require("../utils/imageHelper"); // Helpers const getHomeDoc = async () => Home.findOne().sort({ updatedAt: -1 }); const getHomeData = async () => (await getHomeDoc())?.toObject() || {}; const getDefaultHomeData = () => ({ hero: { badge: "", title: "", description: "", searchPlaceholder: "", buttonLabel: "", image: "", imageAlt: "", floatingBadge: { icon: "", value: "", label: "", }, }, quickLinks: [], valueProp: { badge: "", title: "", description: "", features: [], stats: [], }, programs: { heading: "", description: "", items: [], }, requestInfo: { heading: "", description: "", phone: "", email: "", programs: [], }, }); // Admin: render management view with data from MongoDB exports.index = async (req, res) => { try { let data = await getHomeData(); const defaults = getDefaultHomeData(); // Merge defaults for any missing sections const sections = Object.keys(defaults); sections.forEach((s) => { data[s] = data[s] || defaults[s]; }); const frontendUrl = process.env.FRONTEND_URL || ""; return res.render("admin/home/index", { layout: "layouts/main", title: "Home Management", data, frontendUrl, currentPath: req.path, user: req.session.user, }); } catch (err) { console.error("Home index error:", err); req.flash("error_msg", "Error loading home data"); return req.session.save(() => res.redirect("/admin/dashboard")); } }; // Admin: parse req.body sections and save to MongoDB exports.update = async (req, res) => { try { const sections = [ "hero", "quickLinks", "valueProp", "programs", "requestInfo", ]; let doc = await getHomeDoc(); if (!doc) { doc = new Home({}); } let hasChanges = false; for (const section of sections) { if (req.body[section]) { try { const payload = JSON.parse(req.body[section]); doc[section] = payload; doc.markModified(section); hasChanges = true; } catch (e) { console.error(`Invalid JSON for ${section}:`, e.message); } } } if (!hasChanges) { req.flash("info_msg", "No changes were made"); return req.session.save(() => res.redirect("/admin/home")); } await doc.save(); req.flash("success_msg", "Home page configuration has been updated!"); return req.session.save(() => res.redirect("/admin/home")); } catch (err) { console.error("Home update error:", err); req.flash("error_msg", `Update error: ${err.message}`); return req.session.save(() => res.redirect("/admin/home")); } }; // Public API: return JSON data for frontend exports.api = async (req, res) => { try { let data = await getHomeData(); if (!data || Object.keys(data).length === 0) { data = getDefaultHomeData(); } const baseUrl = process.env.BACKEND_URL || `${req.protocol}://${req.get("host")}`; return res.json(addBaseUrlToImages(data, baseUrl)); } catch (err) { console.error("Home API error:", err); return res.status(500).json({ error: "Error loading home data" }); } };