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:
2026-02-05 02:00:38 +07:00
parent f25f6b9156
commit 1150156556
4 changed files with 25 additions and 26 deletions

View File

@@ -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 }

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);