forked from UKSOURCE/cms.hailearning.edu.vn
142 lines
4.4 KiB
JavaScript
142 lines
4.4 KiB
JavaScript
const { addBaseUrlToImages } = require("../utils/imageHelper");
|
|
const AboutUs = require("../models/aboutUs");
|
|
const jsonHelper = require("../utils/jsonHelper");
|
|
|
|
/**
|
|
* GET /api/about
|
|
* Lấy dữ liệu About Us (Public API cho website và CMS load dữ liệu)
|
|
*/
|
|
exports.getAbout = async (req, res) => {
|
|
try {
|
|
// Force no-cache headers
|
|
res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
|
|
res.setHeader('Pragma', 'no-cache');
|
|
res.setHeader('Expires', '0');
|
|
|
|
const data = await AboutUs.getSingle();
|
|
const rawData = data.toObject();
|
|
|
|
const baseUrl = process.env.BACKEND_URL || `${req.protocol}://${req.get('host')}`;
|
|
const processedData = addBaseUrlToImages(rawData, baseUrl);
|
|
|
|
res.json(processedData);
|
|
} catch (error) {
|
|
console.error("Error getting about data:", error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: "Failed to get about data"
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* PUT /api/about
|
|
* Cập nhật dữ liệu About Us (Dùng cho AJAX từ CMS)
|
|
*/
|
|
exports.updateAbout = async (req, res) => {
|
|
try {
|
|
let updateData = req.body;
|
|
|
|
// Nếu dữ liệu gửi qua trường aboutJson (dạng string JSON)
|
|
if (updateData.aboutJson && typeof updateData.aboutJson === "string") {
|
|
try {
|
|
updateData = JSON.parse(updateData.aboutJson);
|
|
} catch (e) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Invalid JSON in aboutJson"
|
|
});
|
|
}
|
|
}
|
|
|
|
const doc = await AboutUs.getSingle();
|
|
// Use .set() for better handling of nested objects/arrays in Mongoose
|
|
doc.set(updateData);
|
|
await doc.save();
|
|
|
|
// Fetch fresh data for syncing and returning
|
|
const finalData = await AboutUs.findOne()
|
|
.select('-_id -__v -createdAt -updatedAt')
|
|
.lean();
|
|
|
|
// Update about.json file to keep it in sync
|
|
jsonHelper.writeJsonFile("about", finalData);
|
|
|
|
res.json({
|
|
success: true,
|
|
message: "About Us updated successfully",
|
|
data: finalData
|
|
});
|
|
} catch (error) {
|
|
console.error("Error updating about data:", error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: "Failed to update about data: " + error.message
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Render admin page (Dùng cho Admin UI)
|
|
*/
|
|
exports.index = async (req, res) => {
|
|
try {
|
|
const data = await AboutUs.getSingle();
|
|
const rawData = data.toObject();
|
|
|
|
const activeTab = req.query.activeTab || "hero";
|
|
res.render("admin/aboutUs/index", {
|
|
layout: "layouts/main",
|
|
title: "About Us Management",
|
|
data: rawData,
|
|
activeTab,
|
|
user: req.session.user,
|
|
currentPath: req.path,
|
|
frontendUrl: process.env.FRONTEND_URL || 'http://localhost:3000'
|
|
});
|
|
} catch (err) {
|
|
console.error("Error in about index:", err);
|
|
req.flash("error_msg", "Error loading About Us page");
|
|
res.redirect("/admin/dashboard");
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Update method cho form-based submission (Admin UI - Post fallback)
|
|
*/
|
|
exports.update = async (req, res) => {
|
|
try {
|
|
let updateData = req.body;
|
|
if (updateData.aboutJson && typeof updateData.aboutJson === "string") {
|
|
try {
|
|
updateData = JSON.parse(updateData.aboutJson);
|
|
} catch (e) {
|
|
req.flash("error_msg", "Invalid JSON data");
|
|
return res.redirect("/admin/about-us");
|
|
}
|
|
}
|
|
|
|
const doc = await AboutUs.getSingle();
|
|
doc.set(updateData);
|
|
await doc.save();
|
|
|
|
const finalData = await AboutUs.findOne()
|
|
.select('-_id -__v -createdAt -updatedAt')
|
|
.lean();
|
|
jsonHelper.writeJsonFile("about", finalData);
|
|
|
|
req.flash("success_msg", "About Us updated successfully");
|
|
const activeTab = req.query.activeTab || "hero";
|
|
res.redirect(`/admin/about-us?activeTab=${activeTab}`);
|
|
} catch (err) {
|
|
console.error("Update error:", err);
|
|
req.flash("error_msg", "Error updating About Us: " + err.message);
|
|
res.redirect("/admin/about-us");
|
|
}
|
|
};
|
|
|
|
// Aliases for compatibility
|
|
exports.api = exports.getAbout;
|
|
exports.page = exports.getAbout;
|
|
exports.updateAboutUs = exports.updateAbout;
|