{
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/product-desc/overview",
      "description": "Lấy tổng quan tiến độ: Số lượng SP có/thiếu mô tả, trạng thái duyệt (Postgres vs StarRocks)."
    },
    {
      "method": "GET",
      "path": "/api/product-desc/list",
      "description": "Lấy danh sách sản phẩm kèm trạng thái (đã có Ultra Desc, chờ duyệt, có AI Matches)."
    },
    {
      "method": "POST",
      "path": "/api/product-desc/generate",
      "description": "Chạy LangGraph pipeline sinh mô tả (Grounded Generation) cho 1 sản phẩm cụ thể."
    },
    {
      "method": "POST",
      "path": "/api/product-desc/n8n-generate",
      "description": "Endpoint riêng cho n8n, nhận metadata từ Sheets, tự fetch ảnh Base64 và sinh content."
    },
    {
      "method": "POST",
      "path": "/api/product-desc/batch-generate",
      "description": "Đẩy danh sách ID sản phẩm vào Redis Queue để Background Worker xử lý ngầm."
    },
    {
      "method": "POST",
      "path": "/api/product-desc/saved/{code}/rewrite-field",
      "description": "Sử dụng AI để viết lại 1 trường thông tin (VD: hook_quang_cao) dựa trên config động."
    },
    {
      "method": "POST",
      "path": "/api/product-desc/sync-material",
      "description": "Đồng bộ nhanh chất liệu từ StarRocks vào bản mô tả đã lưu mà không cần chạy lại AI."
    }
  ]
}