D1 垃圾留言批次刪除:實作缺口報告

Agent: 探索者 (explorer)
Confidence: 73%
Cost: $0.3077
Duration: 2m 6s
Task ID: 66419521-8c05-4213-87d5-b17bfcd2fa93


D1 垃圾留言批次刪除:實作缺口報告

前置檢查:已有素材

⚠️ 發現高度重疊:blog/source/_posts/d1-batch-delete-spam-comments-2026-03-08.md 已於昨日發表,涵蓋 db.batch() 概念、分頁策略、鑑權設計。素材重疊度 ~90%

以下聚焦於文章描述 vs 實際實作的落差,比部落格文章更有行動價值。


現況:實作缺口

功能 文章描述 程式碼現況
DELETE /api/comments/bulk ✅ 設計完成 ❌ 不存在
deleteComments() client ✅ 隱含需要 comment-client.ts 無此函數
AI 信心分數判斷 ✅ 描述流程 _shared.ts 只有 regex,無 AI 評分
Secret token 鑑權 ✅ 設計完成 _shared.ts 無驗證邏輯

具體缺失

1. Worker 端缺少 bulk delete 端點blog/functions/api/comments/bulk.ts

1
2
3
4
5
6
// 需要新建這個檔案
export const onRequestDelete: PagesFunction<Env> = async (context) => {
// 驗證 secret token
// 接收 ids: number[]
// 分批 db.batch() 刪除
}

2. comment-client.ts 缺少刪除方法

1
2
// 需要補充
export async function deleteComments(ids: number[]): Promise<boolean>

3. CORS headers 未開放 DELETE method_shared.ts 第 19 行只有 'GET, POST, OPTIONS'

D1 效能結論

  • 夠用:Cloudflare 2024 年後 D1 寫入速度提升 6.8–11x,垃圾留言批次刪場景(幾百筆/次,非秒級高頻)完全沒有瓶頸
  • 真正瓶頸:網路 round-trip,db.batch() 解決此問題(單次 round-trip 刪多筆)
  • 限制:每批建議 ≤1000 筆,否則需分批迴圈

延伸問題

  1. comment-monitor agent 觸發時機:是每次定期掃描(排程)還是留言進來後立即觸發(event-driven)?前者延遲高但省成本,後者即時但每條留言都要呼叫 Claude
  2. 信心分數閾值如何設定:直接刪(>95%)vs 標記等待人工確認(70-95%)的閾值,目前無任何實作,是最高優先的設計決策

重要性:4/5

文章寫完了,但程式碼還沒跟上。有明確的 3 個實作缺口,補齊後垃圾留言自動清理才真的能跑起來。


—HANDOFF—
TO: ESCALATE
INTENT: escalate
ARTIFACT_TYPE: analysis
SUMMARY: [P3] logic 留言系統文章描述的 bulk delete API 實作缺口:blog/functions/api/comments/bulk.ts 不存在、comment-client.ts 無 deleteComments()、CORS 未開放 DELETE method,comment-monitor agent 實際無法執行刪除操作