# DramaLing 複習功能前後端系統流程圖
**創建日期**: 2025-10-05
**系統版本**: v2.0
**架構狀態**: ✅ 已實現並運行
---
## 🏗️ **系統整體架構圖**
```mermaid
graph TB
subgraph "前端層 (Frontend)"
UI[用戶界面
React/Next.js]
RH[複習 Hooks
useReviewSession]
RC[複習組件
FlipMemory/VocabQuiz]
API[API 客戶端
apiClient]
end
subgraph "後端層 (Backend)"
CTRL[控制器層
Controllers]
SVC[服務層
Services]
DB[(數據庫
SQLite)]
end
subgraph "核心算法"
SM2[SM2 間隔重複算法]
CEFR[CEFR 智能適配]
end
UI --> RH
RH --> RC
RC --> API
API --> CTRL
CTRL --> SVC
SVC --> DB
SVC --> SM2
SVC --> CEFR
style UI fill:#e3f2fd
style RH fill:#e8f5e8
style RC fill:#fff3e0
style CTRL fill:#fce4ec
style SVC fill:#f3e5f5
style DB fill:#e0f2f1
style SM2 fill:#fff9c4
style CEFR fill:#ffecb3
```
---
## 🔄 **複習流程完整圖解**
### **1. 複習啟動流程**
```mermaid
sequenceDiagram
participant U as 用戶
participant FE as 前端
participant BE as 後端
participant DB as 數據庫
U->>FE: 訪問 /review-simple
FE->>FE: 載入 useReviewSession
FE->>FE: 檢查 localStorage 進度
alt 有保存的進度
FE->>FE: 恢復進度狀態
else 無保存進度
FE->>BE: GET /api/flashcards/due-today
BE->>DB: 查詢今日待複習詞卡
DB-->>BE: 返回詞卡列表
BE-->>FE: 返回 JSON 數據
FE->>FE: 生成 INITIAL_TEST_ITEMS
end
FE->>FE: sortTestItemsByPriority()
FE->>U: 顯示第一個測驗項目
```
### **2. CEFR 智能適配流程**
```mermaid
graph TD
START[開始複習] --> CHECK{檢查學習者等級}
CHECK -->|A1學習者| A1[基礎保護模式
翻卡+詞彙選擇+詞彙聽力]
CHECK -->|其他等級| COMPARE{比較詞彙難度}
COMPARE -->|學習者 > 詞彙| EASY[簡單詞彙模式
例句填空+重組+口說]
COMPARE -->|學習者 ≈ 詞彙| MEDIUM[適中詞彙模式
詞彙選擇+重組+口說]
COMPARE -->|學習者 < 詞彙| HARD[困難詞彙模式
翻卡+詞彙選擇+聽力]
A1 --> EXECUTE[執行測驗]
EASY --> EXECUTE
MEDIUM --> EXECUTE
HARD --> EXECUTE
style A1 fill:#c8e6c9
style EASY fill:#e1f5fe
style MEDIUM fill:#fff3e0
style HARD fill:#ffcdd2
style EXECUTE fill:#f3e5f5
```
### **3. 測驗執行與狀態管理流程**
```mermaid
graph TD
INIT[初始化測驗項目] --> SORT[優先級排序]
SORT --> CURRENT[獲取當前項目]
CURRENT --> RENDER[渲染對應組件]
subgraph "測驗類型"
FLIP[FlipMemory
翻卡記憶]
VOCAB[VocabChoiceQuiz
詞彙選擇]
LISTEN[聽力測驗]
SPEAK[口說測驗]
end
RENDER --> FLIP
RENDER --> VOCAB
RENDER --> LISTEN
RENDER --> SPEAK
FLIP --> ANSWER[用戶答題]
VOCAB --> ANSWER
LISTEN --> ANSWER
SPEAK --> ANSWER
ANSWER --> DISPATCH[派發 Action]
DISPATCH --> REDUCER[reviewReducer 處理]
REDUCER --> UPDATE[更新狀態]
UPDATE --> SAVE[保存進度]
SAVE --> NEXT{有下一題?}
NEXT -->|是| SORT
NEXT -->|否| COMPLETE[顯示結果]
style INIT fill:#e8f5e8
style CURRENT fill:#fff3e0
style ANSWER fill:#e3f2fd
style UPDATE fill:#f3e5f5
style COMPLETE fill:#c8e6c9
```
---
## 🔧 **前端架構詳細圖**
### **組件層次結構**
```mermaid
graph TD
subgraph "頁面層"
RSP[review-simple/page.tsx
主頁面容器]
end
subgraph "Hook 層"
URS[useReviewSession
狀態管理核心]
RR[reviewReducer
狀態更新邏輯]
end
subgraph "組件層"
QP[QuizProgress
進度顯示]
FM[FlipMemory
翻卡組件]
VCQ[VocabChoiceQuiz
詞彙選擇]
QR[QuizResult
結果顯示]
end
subgraph "UI 組件層"
QH[QuizHeader
測驗標題]
BPB[BluePlayButton
音頻播放]
end
subgraph "數據層"
RSD[reviewSimpleData
測驗數據]
LST[localStorage
進度保存]
end
RSP --> URS
URS --> RR
URS --> QP
URS --> FM
URS --> VCQ
URS --> QR
FM --> QH
FM --> BPB
VCQ --> QH
VCQ --> BPB
RR --> RSD
URS --> LST
style RSP fill:#e3f2fd
style URS fill:#e8f5e8
style RR fill:#fff3e0
style QP fill:#f3e5f5
style FM fill:#fce4ec
style VCQ fill:#fce4ec
```
### **狀態管理流程**
```mermaid
stateDiagram-v2
[*] --> 初始化
初始化 --> 載入進度: localStorage 檢查
載入進度 --> 計算當前題目: sortTestItemsByPriority()
計算當前題目 --> 翻卡記憶: testType = 'flip-card'
計算當前題目 --> 詞彙選擇: testType = 'vocab-choice'
翻卡記憶 --> 答題處理: onAnswer(confidence)
詞彙選擇 --> 答題處理: onAnswer(confidence)
答題處理 --> ANSWER_TEST_ITEM: dispatch action
ANSWER_TEST_ITEM --> 更新狀態: reviewReducer
更新狀態 --> 保存進度: localStorage
保存進度 --> 計算當前題目: 循環繼續
答題處理 --> 跳過處理: onSkip()
跳過處理 --> SKIP_TEST_ITEM: dispatch action
SKIP_TEST_ITEM --> 更新狀態
計算當前題目 --> 完成複習: 無剩餘項目
完成複習 --> [*]
```
---
## 🗃️ **後端架構詳細圖**
### **API 端點映射**
```mermaid
graph LR
subgraph "前端 API 調用"
FC[FlashcardsController]
AC[AuthController]
SC[StatsController]
AIC[AIController]
end
subgraph "服務層"
FS[FlashcardService]
AS[AuthService]
StS[StatsService]
AIS[AIService]
end
subgraph "數據模型"
F[(Flashcard)]
U[(User)]
SR[(StudyRecord)]
TR[(TestResult)]
end
FC --> FS
AC --> AS
SC --> StS
AIC --> AIS
FS --> F
FS --> SR
FS --> TR
AS --> U
StS --> SR
StS --> TR
style FC fill:#e3f2fd
style FS fill:#e8f5e8
style F fill:#fff3e0
```
### **SM2 算法集成流程**
```mermaid
graph TD
ANSWER[用戶答題] --> CALC[計算信心度]
CALC --> SM2{SM2 算法處理}
SM2 --> EASY[簡單 confidence≥2
間隔延長]
SM2 --> MEDIUM[一般 confidence=1
間隔保持]
SM2 --> HARD[困難 confidence=0
間隔縮短]
EASY --> UPDATE[更新 NextReviewDate]
MEDIUM --> UPDATE
HARD --> UPDATE
UPDATE --> SAVE[保存到數據庫]
SAVE --> NEXT[計算下一題]
style ANSWER fill:#e8f5e8
style SM2 fill:#fff3e0
style EASY fill:#c8e6c9
style MEDIUM fill:#fff9c4
style HARD fill:#ffcdd2
```
---
## 📱 **用戶體驗流程圖**
### **完整學習循環**
```mermaid
journey
title 用戶複習學習旅程
section 開始複習
訪問複習頁面: 5: 用戶
載入進度: 4: 系統
顯示第一題: 5: 系統
section 進行測驗
查看題目: 5: 用戶
思考答案: 3: 用戶
提交答案: 5: 用戶
查看結果: 4: 用戶
點擊下一題: 5: 用戶
section 完成複習
顯示統計: 5: 系統
更新進度: 4: 系統
保存記錄: 4: 系統
```
### **智能題型選擇示意圖**
```mermaid
graph TD
USER[學習者
CEFR: B1] --> CHECK[檢查詞彙難度]
CHECK --> W1[Word: Beautiful
CEFR: A2]
CHECK --> W2[Word: Sophisticated
CEFR: B1]
CHECK --> W3[Word: Ubiquitous
CEFR: C1]
W1 --> T1[簡單詞彙
B1 > A2
→ 例句練習]
W2 --> T2[適中詞彙
B1 ≈ B1
→ 全方位練習]
W3 --> T3[困難詞彙
B1 < C1
→ 基礎練習]
style USER fill:#e3f2fd
style W1 fill:#c8e6c9
style W2 fill:#fff9c4
style W3 fill:#ffcdd2
style T1 fill:#e8f5e8
style T2 fill:#fff3e0
style T3 fill:#fce4ec
```
---
## 🎯 **核心技術特色**
### **延遲計數系統**
```mermaid
graph LR
subgraph "題目狀態管理"
NEW[新題目
優先級: 1]
WRONG[答錯題目
wrongCount++
移至隊列末]
SKIP[跳過題目
skipCount++
移至隊列末]
DONE[已完成
isCompleted: true
移出隊列]
end
NEW --> ANSWER{答題結果}
ANSWER -->|正確| DONE
ANSWER -->|錯誤| WRONG
ANSWER -->|跳過| SKIP
WRONG --> RETRY[稍後重試]
SKIP --> RETRY
RETRY --> ANSWER
style NEW fill:#e8f5e8
style DONE fill:#c8e6c9
style WRONG fill:#ffcdd2
style SKIP fill:#fff9c4
```
### **智能排序算法**
```mermaid
graph TD
ITEMS[所有測驗項目] --> FILTER[過濾未完成項目]
FILTER --> SORT[智能排序]
SORT --> P1[優先級 1
新題目 + 無錯誤記錄]
SORT --> P2[優先級 2
有跳過記錄的題目]
SORT --> P3[優先級 3
有錯誤記錄的題目]
P1 --> CURRENT[當前題目]
P2 --> QUEUE[排隊等待]
P3 --> QUEUE
style P1 fill:#c8e6c9
style P2 fill:#fff9c4
style P3 fill:#ffcdd2
style CURRENT fill:#e3f2fd
```
---
## 💾 **數據流向圖**
### **前端狀態管理**
```mermaid
graph TD
subgraph "本地狀態 (useReviewSession)"
TI[testItems: TestItem[]]
SC[score: {correct, total}]
IC[isComplete: boolean]
end
subgraph "計算屬性"
CTI[currentTestItem]
CC[currentCard]
VO[vocabOptions]
end
subgraph "持久化"
LS[localStorage
'review-linear-progress']
end
TI --> CTI
CTI --> CC
CC --> VO
TI --> LS
SC --> LS
IC --> LS
style TI fill:#e8f5e8
style SC fill:#fff3e0
style IC fill:#fce4ec
style LS fill:#e0f2f1
```
### **後端數據結構**
```mermaid
erDiagram
User ||--o{ StudyRecord : has
User ||--o{ TestResult : has
Flashcard ||--o{ StudyRecord : references
Flashcard ||--o{ TestResult : references
User {
string Id
string EnglishLevel
datetime CreatedAt
}
Flashcard {
string Id
string Word
string DifficultyLevel
datetime NextReviewDate
int MasteryLevel
}
StudyRecord {
string Id
string UserId
string FlashcardId
int ConfidenceLevel
datetime ReviewedAt
}
TestResult {
string Id
string UserId
string FlashcardId
string TestType
boolean IsCorrect
datetime CompletedAt
}
```
---
## ⚡ **性能優化策略圖**
### **前端性能優化**
```mermaid
graph TD
subgraph "狀態優化"
UM[useMemo 緩存計算]
UC[useCallback 防止重渲染]
LS[localStorage 進度保存]
end
subgraph "組件優化"
MC[memo 包裝組件]
LL[懶加載非關鍵組件]
CD[代碼分割]
end
subgraph "數據優化"
IC[智能緩存]
PF[預取數據]
DM[數據最小化]
end
UM --> MC
UC --> LL
LS --> IC
MC --> CD
LL --> PF
IC --> DM
style UM fill:#e8f5e8
style UC fill:#e8f5e8
style MC fill:#fff3e0
style LL fill:#fff3e0
style IC fill:#e3f2fd
style PF fill:#e3f2fd
```
---
## 🧪 **測試策略圖解**
### **複習功能測試覆蓋**
```mermaid
mindmap
root((複習功能測試))
單元測試
Hook 測試
useReviewSession
狀態更新邏輯
組件測試
FlipMemory
VocabChoiceQuiz
QuizProgress
整合測試
API 整合
詞卡數據載入
進度保存
用戶流程
完整複習循環
錯誤處理
端到端測試
真實用戶場景
多題型切換
進度保存恢復
性能測試
大量詞卡處理
內存使用
```
---
## 🔍 **複雜度對比總結**
### **前後端複雜度分布**
```mermaid
pie title 系統複雜度分布
"前端 UI 邏輯" : 35
"狀態管理" : 25
"後端 API" : 20
"數據庫操作" : 10
"算法邏輯" : 10
```
### **維護成本評估**
```mermaid
xychart-beta
title "不同模組維護成本"
x-axis [核心Hook, 複習組件, API層, 數據層, 工具函數]
y-axis "維護成本" 0 --> 10
line [8, 6, 4, 3, 7]
```
---
## 📝 **結論與建議**
### **✅ 架構優勢**
- 功能完整,涵蓋 7 種測驗類型
- CEFR 智能適配系統運作良好
- SM2 算法整合成功
- 用戶體驗流暢
### **⚠️ 需要改進**
- Generate 頁面過度複雜 (656行)
- 狀態管理可以進一步優化
- 部分工具函數存在過度抽象
### **🎯 重構優先級**
1. **高**: Generate 頁面簡化
2. **中**: 統一 Modal 定位策略
3. **低**: 長期架構重構
### **📊 系統健康度評分**
- **功能完整性**: ⭐⭐⭐⭐⭐ (5/5)
- **代碼質量**: ⭐⭐⭐⚪⚪ (3/5)
- **維護性**: ⭐⭐⭐⚪⚪ (3/5)
- **性能**: ⭐⭐⭐⭐⚪ (4/5)
---
*📅 最後更新: 2025-10-05*
*🔄 下次評估建議: 重構完成後*