forked from UKSOURCE/cms.hailearning.edu.vn
feat: Refactor header menu and social link controllers to use RESTful method names, remove social link API routes, and add comprehensive social link management to admin routes.
This commit is contained in:
@@ -42,8 +42,8 @@ const deleteRecursive = async (parentId) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 1. Render Menu Tab logic (called from Header index or directly if route allows)
|
// 1. Render Menu Tab logic
|
||||||
exports.renderMenuTab = async (req, res) => {
|
exports.index = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const items = await HeaderMenu.find().sort({ order: 1 });
|
const items = await HeaderMenu.find().sort({ order: 1 });
|
||||||
const menuTree = buildMenuTree(items);
|
const menuTree = buildMenuTree(items);
|
||||||
@@ -55,9 +55,9 @@ exports.renderMenuTab = async (req, res) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 2. Create Menu Item
|
// 2. Create Menu Item
|
||||||
exports.createMenu = async (req, res) => {
|
exports.store = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
console.log('=== BACKEND: createMenu hit ===');
|
console.log('=== BACKEND: store hit ===');
|
||||||
console.log('Body:', req.body);
|
console.log('Body:', req.body);
|
||||||
const { title, url, parentId, order, status, type } = req.body;
|
const { title, url, parentId, order, status, type } = req.body;
|
||||||
const slug = slugify(title, { lower: true, strict: true });
|
const slug = slugify(title, { lower: true, strict: true });
|
||||||
@@ -84,10 +84,10 @@ exports.createMenu = async (req, res) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 3. Update Menu Item
|
// 3. Update Menu Item
|
||||||
exports.updateMenu = async (req, res) => {
|
exports.update = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
console.log('=== BACKEND: updateMenu hit ===', { id });
|
console.log('=== BACKEND: update hit ===', { id });
|
||||||
console.log('Body:', req.body);
|
console.log('Body:', req.body);
|
||||||
const { title, url, parentId, order, status, type } = req.body;
|
const { title, url, parentId, order, status, type } = req.body;
|
||||||
|
|
||||||
@@ -122,11 +122,11 @@ exports.updateMenu = async (req, res) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 4. Delete Menu Item (Cascade delete children)
|
// 4. Delete Menu Item (Cascade delete children)
|
||||||
exports.deleteMenu = async (req, res) => {
|
exports.destroy = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.body;
|
const { id } = req.body;
|
||||||
const menuId = id || req.params.id;
|
const menuId = id || req.params.id;
|
||||||
console.log('=== BACKEND: deleteMenu hit ===', { menuId, body: req.body });
|
console.log('=== BACKEND: destroy hit ===', { menuId, body: req.body });
|
||||||
|
|
||||||
await deleteRecursive(menuId);
|
await deleteRecursive(menuId);
|
||||||
await HeaderMenu.findByIdAndDelete(menuId);
|
await HeaderMenu.findByIdAndDelete(menuId);
|
||||||
@@ -142,7 +142,7 @@ exports.deleteMenu = async (req, res) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 5. Reorder Menu
|
// 5. Reorder Menu
|
||||||
exports.reorderMenu = async (req, res) => {
|
exports.reorder = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { items } = req.body; // Array of { id, order, parentId }
|
const { items } = req.body; // Array of { id, order, parentId }
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const Header = require("../models/header");
|
const Header = require("../models/header");
|
||||||
|
|
||||||
// Get all social links
|
// Get all social links
|
||||||
exports.getAll = async (req, res) => {
|
exports.index = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const header = await Header.findOne({ status: "active" }).sort({ order: 1 });
|
const header = await Header.findOne({ status: "active" }).sort({ order: 1 });
|
||||||
|
|
||||||
@@ -262,7 +262,7 @@ exports.destroy = async (req, res) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Bulk update social links (used for reordering and batch updates)
|
// Bulk update social links (used for reordering and batch updates)
|
||||||
exports.bulkUpdate = async (req, res) => {
|
exports.reorder = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { socialLinks } = req.body;
|
const { socialLinks } = req.body;
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ const headerMenuController = require("../controllers/headerMenuController");
|
|||||||
const blogController = require("../controllers/blogController");
|
const blogController = require("../controllers/blogController");
|
||||||
const blogCategoryController = require("../controllers/blogCategoryController");
|
const blogCategoryController = require("../controllers/blogCategoryController");
|
||||||
const blogTagController = require("../controllers/blogTagController");
|
const blogTagController = require("../controllers/blogTagController");
|
||||||
|
const socialLinkController = require("../controllers/socialLinkController");
|
||||||
|
|
||||||
// Dashboard
|
// Dashboard
|
||||||
router.get("/dashboard", ensureAuthenticated, dashboardController.getDashboard);
|
router.get("/dashboard", ensureAuthenticated, dashboardController.getDashboard);
|
||||||
@@ -76,23 +77,25 @@ router.post("/upload/video", ensureAuthenticated, uploadVideo.single("video"), u
|
|||||||
router.post("/upload/update-path", ensureAuthenticated, uploadController.updateImagePath);
|
router.post("/upload/update-path", ensureAuthenticated, uploadController.updateImagePath);
|
||||||
router.post("/upload/delete", ensureAuthenticated, uploadController.deleteImage);
|
router.post("/upload/delete", ensureAuthenticated, uploadController.deleteImage);
|
||||||
|
|
||||||
// Header routes
|
|
||||||
// Header routes
|
// Header routes
|
||||||
router.get("/header", ensureAuthenticated, headerController.index);
|
router.get("/header", ensureAuthenticated, headerController.index);
|
||||||
router.post("/header/update", ensureAuthenticated, headerController.update);
|
router.post("/header/update", ensureAuthenticated, headerController.update);
|
||||||
router.post("/header/update-menu", ensureAuthenticated, headerController.updateMenu);
|
router.get("/header/data", ensureAuthenticated, headerController.api); // Normalized from getHeaderData
|
||||||
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);
|
|
||||||
router.patch("/header/:id/status", ensureAuthenticated, headerController.updateStatus);
|
router.patch("/header/:id/status", ensureAuthenticated, headerController.updateStatus);
|
||||||
router.delete("/header/:id", ensureAuthenticated, headerController.destroy);
|
router.delete("/header/:id", ensureAuthenticated, headerController.destroy);
|
||||||
|
|
||||||
// Header Menu INTEGRATED routes
|
// Header Menu INTEGRATED routes
|
||||||
router.post("/header/menu/create", ensureAuthenticated, headerMenuController.createMenu);
|
router.post("/header/menu/create", ensureAuthenticated, headerMenuController.store);
|
||||||
router.post("/header/menu/update/:id", ensureAuthenticated, headerMenuController.updateMenu);
|
router.post("/header/menu/update/:id", ensureAuthenticated, headerMenuController.update);
|
||||||
router.post("/header/menu/delete", ensureAuthenticated, headerMenuController.deleteMenu);
|
router.post("/header/menu/delete", ensureAuthenticated, headerMenuController.destroy);
|
||||||
router.post("/header/menu/reorder", ensureAuthenticated, headerMenuController.reorderMenu);
|
router.post("/header/menu/reorder", ensureAuthenticated, headerMenuController.reorder);
|
||||||
|
|
||||||
|
// Social Links routes
|
||||||
|
router.get("/social-links", ensureAuthenticated, socialLinkController.index);
|
||||||
|
router.post("/social-links", ensureAuthenticated, socialLinkController.store);
|
||||||
|
router.put("/social-links/:platform", ensureAuthenticated, socialLinkController.update);
|
||||||
|
router.delete("/social-links/:platform", ensureAuthenticated, socialLinkController.destroy);
|
||||||
|
router.post("/social-links/reorder", ensureAuthenticated, socialLinkController.reorder);
|
||||||
|
|
||||||
// Footer routes
|
// Footer routes
|
||||||
router.get("/footer", ensureAuthenticated, footerController.index);
|
router.get("/footer", ensureAuthenticated, footerController.index);
|
||||||
|
|||||||
@@ -56,12 +56,8 @@ router.get("/api/menu-tree", headerController.getMenuTreeAPI);
|
|||||||
router.get("/api/header-menu", headerMenuController.api);
|
router.get("/api/header-menu", headerMenuController.api);
|
||||||
|
|
||||||
// Social Links API routes
|
// Social Links API routes
|
||||||
router.get("/api/social-links", socialLinkController.getAll);
|
router.get("/api/social-links", socialLinkController.index);
|
||||||
router.get("/api/social-links/:platform", socialLinkController.show);
|
router.get("/api/social-links/:platform", socialLinkController.show);
|
||||||
router.post("/api/social-links", socialLinkController.store);
|
|
||||||
router.put("/api/social-links/:platform", socialLinkController.update);
|
|
||||||
router.delete("/api/social-links/:platform", socialLinkController.destroy);
|
|
||||||
router.post("/api/social-links/bulk-update", socialLinkController.bulkUpdate);
|
|
||||||
|
|
||||||
// Footer API route
|
// Footer API route
|
||||||
router.get("/api/footer", footerController.api);
|
router.get("/api/footer", footerController.api);
|
||||||
|
|||||||
Reference in New Issue
Block a user