Initial commit: Daily News App

企業內部新聞彙整與分析系統
- 自動新聞抓取 (Digitimes, 經濟日報, 工商時報)
- AI 智慧摘要 (OpenAI/Claude/Ollama)
- 群組管理與訂閱通知
- 已清理 Python 快取檔案

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
donald
2025-12-03 23:53:24 +08:00
commit db0f0bbfe7
50 changed files with 11883 additions and 0 deletions

609
checklist.md Normal file
View File

@@ -0,0 +1,609 @@
# 每日報導 APP - 技術確認清單
> 建立日期2025-01-27
> 最後更新2025-01-27
> 狀態:🟡 進行中
---
## 📋 使用說明
- ✅ 已確認
- 🟡 待確認
- ❌ 已取消/不適用
- 📝 備註欄位可填入補充說明
---
## 1. 前端技術架構
### 1.1 前端框架選擇
**狀態:** 🟡 待確認
**問題:** 前端應使用哪個框架?
- [V] React
- [ ] Vue.js
- [ ] Angular
- [ ] 純 HTML/CSS/JavaScript無框架
- [ ] 其他________________
**備註:**
---
### 1.2 前端與後端通訊方式
**狀態:** 🟡 待確認
**問題:** 前端如何與後端 API 通訊?
- [V] RESTful API
- [ ] GraphQL
- [ ] WebSocket即時更新
- [ ] 混合方式________________
**備註:**
---
### 1.3 前端渲染方式
**狀態:** 🟡 待確認
**問題:** 前端是否需要服務端渲染SSR
- [ ] 純 SPA單頁應用
- [ ] SSR服務端渲染
- [ ] SSG靜態網站生成
- [V] 混合模式
**備註:**
---
## 2. 新聞抓取技術細節
### 2.1 Digitimes 登入狀態管理
**狀態:** 🟡 待確認
**問題:** 如何處理 Digitimes 的登入狀態?
- [ ] 每次抓取都重新登入
- [V] 維持 session定期檢查有效性
- [V] 使用 Cookie 持久化
- [ ] 其他方式________________
**備註:**
---
### 2.2 爬蟲實作技術
**狀態:** 🟡 待確認
**問題:** 使用哪種爬蟲技術?
- [ ] Selenium處理 JavaScript 渲染)
- [V] Scrapy高效能爬蟲框架
- [ ] BeautifulSoup + Requests簡單靜態頁面
- [ ] Playwright現代瀏覽器自動化
- [ ] 混合使用________________
**備註:**
---
### 2.3 新聞去重機制
**狀態:** 🟡 待確認
**問題:** 如何避免重複抓取同一篇新聞?
- [ ] 比對標題 + URL
- [V] 比對標題 + 發布時間
- [ ] 使用內容 hash 值
- [ ] 資料庫唯一索引
- [ ] 組合方式________________
**備註:**
---
### 2.4 新聞結構化提取
**狀態:** 🟡 待確認
**問題:** 需要提取哪些新聞欄位?
- [V] 標題(必填)
- [V] 正文內容(必填)
- [V] 發布時間(必填)
- [ ] 作者
- [ ] 來源 URL
- [ ] 分類/標籤
- [ ] 圖片
- [ ] 其他________________
**備註:**
---
## 3. AI 摘要處理邏輯
### 3.1 多篇新聞合併策略
**狀態:** 🟡 待確認
**問題:** 當一個群組有多篇相關新聞時,如何處理?
- [V] 全部合併成一段綜合分析(無數量限制)
- [ ] 限制數量(如最多 10 篇),超過則分批處理
- [ ] 每篇單獨摘要,再合併摘要
- [ ] 其他策略________________
**備註:**
---
### 3.2 Token 限制處理
**狀態:** 🟡 待確認
**問題:** 當新聞內容超過模型 token 限制時,如何處理?
- [ ] 截斷內容(保留前 N 篇)
- [] 分批處理後再合併摘要
- [V] 先進行初步摘要再送 LLM
- [ ] 通知專員手動處理
- [ ] 其他方式________________
**備註:**
---
### 3.3 背景資訊與摘要方向傳遞
**狀態:** 🟡 待確認
**問題:** 如何將群組的背景資訊與摘要方向整合到 LLM prompt
- [ ] 放在 system prompt 中
- [v] 放在 user prompt 開頭
- [ ] 使用 few-shot examples
- [ ] 組合方式________________
**備註:**
---
### 3.4 AI 摘要並行處理
**狀態:** 🟡 待確認
**問題:** 多個群組的摘要是否並行產生?
- [v] 串行處理(一個接一個)
- [ ] 並行處理(同時處理多個群組)
- [ ] 有限並行(如最多 3 個同時)
- [ ] 使用任務佇列(如 Celery
**備註:**
---
## 4. 資料庫設計
### 4.1 資料庫 Schema 設計
**狀態:** 🟡 待確認
**問題:** 需要哪些主要資料表?
- [v] users用戶表
- [v] groups群組表
- [v] keywords關鍵字表
- [v] news新聞表
- [v] reports報告表
- [ ] subscriptions訂閱表
- [v] comments留言表
- [ ] favorites收藏表
- [ ] annotations標註表
- [v] llm_settingsLLM 設定表)
- [v] system_logs系統日誌表
- [ ] 其他________________
**備註:**
---
### 4.2 關聯關係設計
**狀態:** 🟡 待確認
**問題:** 報告與新聞的關聯方式?
- [ ] 一對多(一份報告對應多篇新聞)
- [v] 多對多(一篇新聞可出現在多份報告)
- [ ] 其他________________
**備註:**
---
### 4.3 索引策略
**狀態:** 🟡 待確認
**問題:** 需要建立哪些索引以優化查詢效能?
- [v] 新聞標題索引
- [ ] 新聞發布時間索引
- [v] 群組關鍵字索引
- [v] 用戶訂閱關係索引
- [ ] 其他________________
**備註:**
---
## 5. Email 通知機制
### 5.1 Email 模板格式
**狀態:** 🟡 待確認
**問題:** Email 內容應包含哪些資訊?
- [v] 報告標題
- [v] 發布日期
- [v] AI 摘要內容
- [ ] 相關新聞標題列表
- [v] 線上閱讀連結
- [ ] 取消訂閱連結
- [ ] 其他________________
**備註:**
---
### 5.2 Email 模板樣式
**狀態:** 🟡 待確認
**問題:** Email 模板樣式?
- [ ] 純文字格式
- [] HTML 格式(含樣式)
- [v] 響應式 HTML支援手機
- [ ] 其他________________
**備註:**
---
### 5.3 批次發送策略
**狀態:** 🟡 待確認
**問題:** 當訂閱讀者數量多時,如何發送 Email
- [ ] 同步發送(一次發送所有)
- [v] 批次發送(如每批 10 封)
- [ ] 使用任務佇列(背景處理)
- [ ] 其他方式________________
**備註:**
---
### 5.4 發送失敗處理
**狀態:** 🟡 待確認
**問題:** Email 發送失敗時的處理方式?
- [ ] 自動重試(最多 3 次)
- [v] 記錄失敗日誌
- [v] 通知系統管理員
- [ ] 組合處理________________
**備註:**
---
## 6. PDF 匯出細節
### 6.1 PDF 生成技術
**狀態:** 🟡 待確認
**問題:** 使用哪種技術生成 PDF
- [v] ReportLab
- [ ] WeasyPrint
- [ ] pdfkit / wkhtmltopdf
- [ ] 前端生成(如 jsPDF
- [ ] 其他________________
**備註:**
---
### 6.2 PDF 模板內容
**狀態:** 🟡 待確認
**問題:** PDF 應包含哪些內容?
- [v] 公司 Logo
- [v] 報告標題
- [v] 發布日期
- [v] AI 摘要內容
- [v ] 相關新聞列表(標題 + 連結)
- [v ] 頁首頁尾文字
- [ ] 其他________________
**備註:**
---
### 6.3 PDF 樣式規範
**狀態:** 🟡 待確認
**問題:** PDF 樣式需求?
- [v ] 固定樣式(不可自訂)
- [ ] 可自訂字體
- [ ] 可自訂顏色
- [ ] 可自訂版面配置
- [ ] 其他________________
**備註:**
---
## 7. 權限與操作細節
### 7.1 已發布報告修改權限
**狀態:** 🟡 待確認
**問題:** 專員是否可以修改或撤回已發布的報告?
- [ ] 可以修改(會通知讀者)
- [v ] 可以撤回(標記為已撤回)
- [ ] 完全不可修改
- [ ] 僅限發布後 X 小時內可修改
**備註:**
---
### 7.2 留言審核機制
**狀態:** 🟡 待確認
**問題:** 讀者留言是否需要審核?
- [ ] 不需要審核(直接顯示)
- [ ] 需要專員審核
- [ ] 需要管理員審核
- [v ] 關鍵字過濾後自動審核
**備註:**
---
### 7.3 工作日定義
**狀態:** 🟡 待確認
**問題:** 如何判斷工作日?
- [v ] 週一至週五(排除假日)
- [v ] 使用台灣行事曆 API
- [ ] 手動設定假日清單
- [ ] 其他方式________________
**備註:**
---
## 8. 錯誤處理與備援
### 8.1 部分新聞抓取失敗處理
**狀態:** 🟡 待確認
**問題:** 當部分新聞來源抓取失敗時?
- [ ] 繼續處理其他成功的新聞
- [ ] 全部標記為失敗,等待重試
- [v ] 部分成功的新聞先處理,失敗的稍後重試
- [ ] 其他方式________________
**備註:**
---
### 8.2 AI 摘要失敗處理
**狀態:** 🟡 待確認
**問題:** 當 AI 摘要產生失敗時?
- [ ] 保留原始新聞,標記為「待處理」
- [v] 通知專員手動處理
- [v] 自動重試(最多 3 次)
- [ ] 組合處理________________
**備註:**
---
### 8.3 加密金鑰管理
**狀態:** 🟡 待確認
**問題:** API Key 加密金鑰如何管理?
- [v] 儲存在環境變數
- [ ] 儲存在資料庫(加密)
- [ ] 使用金鑰管理服務(如 HashiCorp Vault
- [ ] 其他方式________________
**備註:**
---
### 8.4 加密金鑰輪換
**狀態:** 🟡 待確認
**問題:** 是否需要定期輪換加密金鑰?
- [ ] 不需要
- [v] 需要(每 3 個月)
- [ ] 手動觸發
- [ ] 其他________________
**備註:**
---
## 9. 效能優化
### 9.1 快取策略
**狀態:** 🟡 待確認
**問題:** 是否需要快取機制?
- [ ] 不需要
- [v] Redis 快取
- [ ] 記憶體快取
- [ ] 資料庫查詢快取
- [ ] 組合方式________________
**備註:**
---
### 9.2 非同步任務處理
**狀態:** 🟡 待確認
**問題:** 新聞抓取與 AI 摘要是否使用任務佇列?
- [ ] 同步處理
- [v] Celery + Redis/RabbitMQ
- [ ] 其他任務佇列________________
- [ ] 不需要
**備註:**
---
### 9.3 資料庫連線池
**狀態:** 🟡 待確認
**問題:** 資料庫連線管理方式?
- [v] 使用連線池SQLAlchemy
- [ ] 每次請求建立連線
- [ ] 其他方式________________
**備註:**
---
## 10. 雙語介面
### 10.1 語言切換方式
**狀態:** 🟡 待確認
**問題:** 用戶如何切換語言?
- [v] 用戶手動選擇(右上角切換)
- [v] 系統自動偵測瀏覽器語言
- [ ] 根據用戶設定檔
- [ ] 其他方式________________
**備註:**
---
### 10.2 內容翻譯需求
**狀態:** 🟡 待確認
**問題:** 新聞與摘要是否需要自動翻譯?
- [ ] 不需要(僅介面翻譯)
- [ ] 需要(新聞內容翻譯)
- [v] 需要(摘要內容翻譯)
- [ ] 需要(全部內容翻譯)
- [ ] 其他________________
**備註:**
---
## 11. 其他技術細節
### 11.1 日誌記錄策略
**狀態:** 🟡 待確認
**問題:** 需要記錄哪些操作日誌?
- [v] 用戶登入/登出
- [v] 新聞抓取記錄
- [v] AI 摘要產生記錄
- [v] 報告發布記錄
- [v ] 系統錯誤記錄
- [v ] API 呼叫記錄
- [ ] 其他________________
**備註:**
---
### 11.2 日誌保留期限
**狀態:** 🟡 待確認
**問題:** 操作日誌保留多久?
- [ ] 30 天
- [v ] 60 天
- [ ] 90 天
- [ ] 1 年
- [ ] 永久保留
- [ ] 其他________________
**備註:**
---
### 11.3 備份策略細節
**狀態:** 🟡 待確認
**問題:** 資料庫備份的具體方式?
- [ ] 每日全量備份
- [v ] 每日增量備份
- [ ] 每週全量 + 每日增量
- [ ] 其他方式________________
**備註:**
---
### 11.4 監控與告警
**狀態:** 🟡 待確認
**問題:** 需要哪些監控與告警機制?
- [v ] 系統健康檢查
- [v ] 新聞抓取失敗告警
- [v ] AI 摘要失敗告警
- [v ] 資料庫連線異常告警
- [v ] 系統效能監控
- [ ] 其他________________
**備註:**
---
## 📊 進度統計
- **總問題數:** 44
- **已確認:** 0
- **待確認:** 44
- **已取消:** 0
---
## 📝 更新記錄
| 日期 | 更新內容 | 更新人 |
|------|---------|--------|
| 2025-01-27 | 建立初始清單 | System |