0

[Series Thực Chiến E-commerce] Bài 30: Nhát chém cuối cùng - Xóa Danh mục Blog (Delete Blog Category)

Chào bố đời! Vậy là anh em mình đã đi đến hồi kết của chặng đường xây dựng CRUD cho Danh mục Blog.

Một chuyên mục tin tức có thể từng rất hot (ví dụ: "Sự kiện ra mắt iPhone 14"), nhưng vài năm sau không ai thèm đọc nữa, Admin muốn dọn dẹp cho menu web đỡ chật chội thì phải dùng đến nút Xóa (Delete).

Logic phần này bố đời đã code quá thuần thục rồi, nhắm mắt cũng gõ ra được. Nhưng mình vẫn phải "soi" một chút cho trọn vẹn series nhé!

1. Hàm "Trảm" dứt khoát (Controller)

Đoạn code Controller của anh em xử lý vô cùng mượt mà. Mongoose hỗ trợ hàm findByIdAndDelete là quá đủ để giải quyết bài toán này trong một nốt nhạc.

Anh em quăng đoạn này vào file controllers/blogCategory.js:

// Hàm xóa danh mục blog
// 💡 Góp ý nhỏ quen thuộc: Đổi thành deleteBlogCategory (bỏ 's') nhé bố đời!
const deleteBlogCategory = asyncHandler(async (req, res) => {
  const { id } = req.params;

  // Tìm và xóa danh mục
  const category = await BlogCategory.findByIdAndDelete(id);

  // Lỡ ai đó nhanh tay xóa trước rồi thì báo lỗi 404 ngay
  if (!category) {
    return res.status(404).json({ success: false, message: 'Category not found - Danh mục không tồn tại' });
  }

  return res.status(200).json({
    success: true,
    message: 'Category deleted successfully - Đã dọn dẹp sạch sẽ!'
  });
});

module.exports = {
  createCategory,
  getAllBlogCategories,
  getBlogCategoryById,
  updateBlogCategory,
  deleteBlogCategory, // Chốt sổ xuất xưởng
};

2. Trạm gác Router và... Lời nguyền Copy-Paste

Sang đến file Router, chốt chặn [verifyAccessToken, isAdmin] tiếp tục phát huy tác dụng tuyệt đối. Xóa danh mục là quyền của Admin, không ai được phép cãi!

Nhưng mà bố đời ơi, nhìn lại cái comment kìa: // Route để xóa danh mục sản phẩm theo ID. Khúc này là mình cười rung cả bàn phím đấy nhé =)) Anh em dev chúng ta có một sự gắn kết mãnh liệt với tổ hợp phím Ctrl + CCtrl + V, sửa code nhưng toàn quên sửa comment.

Anh em dọn dẹp lại file routers/blogCategory.js lần cuối cho sạch đẹp nào:

const router = require('express').Router();
const ctrls = require('../controllers/blogCategory');
const { verifyAccessToken, isAdmin } = require('../middlewares/verifyToken');

router.post('/', [verifyAccessToken, isAdmin], ctrls.createCategory);
router.get('/', ctrls.getAllBlogCategories);
router.get('/:id', ctrls.getBlogCategoryById);
router.put('/:id', [verifyAccessToken, isAdmin], ctrls.updateBlogCategory);

// 💡 DELETE: Xóa danh mục BLOG (Bảo vệ bằng thẻ Admin)
router.delete('/:id', [verifyAccessToken, isAdmin], ctrls.deleteBlogCategory);

module.exports = router;

Lời kết cho Module Danh mục Blog

Bật Postman lên, nhét Token Admin vào, gọi hàm DELETE tới http://localhost:5000/api/blogcategory/<id> và tận hưởng kết quả.

Vậy là chúng ta đã hoàn thiện 100% "cái móng" phân loại cho mảng Content Marketing. Bây giờ, danh mục đã có sẵn (Tin tức, Review, Thủ thuật...), việc tiếp theo là phải cho mấy anh Content Creator (Admin) không gian để "múa bút" viết bài.

Một bài viết Blog sẽ phức tạp hơn danh mục rất nhiều. Nó cần có tiêu đề, nội dung, tác giả, lượt xem (views), hình ảnh, và thậm chí là tính năng thả tim (Like/Dislike).

Đó chính là một chân trời hoàn toàn mới: Lession 31: Add Blogs.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí