# 複習系統設計工具重構規格
## 📋 現況問題分析
### 當前 review-design 頁面的問題
**檔案**: `/frontend/app/review-design/page.tsx`
#### ❌ **問題 1: 靜態組件展示**
```typescript
// 當前實作:只是靜態展示不同測驗組件
const [activeTab, setActiveTab] = useState('FlipMemoryTest')
// 問題:無法模擬真實的複習流程
return
```
**後果**:
- 無法測試真實的 Store 協作
- 無法驗證答題→進度更新→下一題的完整流程
- 不能測試錯誤處理和邊界情況
#### ❌ **問題 2: 測試資料寫死**
```typescript
// 當前實作:直接 import 靜態 JSON
import exampleData from './example-data.json'
// 問題:無法動態切換或重置測試場景
const cardData = exampleData[currentCardIndex]
```
**後果**:
- 無法測試空資料狀態
- 無法測試資料載入失敗情況
- 無法快速切換不同測試場景
#### ❌ **問題 3: 缺乏真實性**
```typescript
// 當前實作:簡化的回調函數
const handleAnswer = (answer: string) => {
addLog(`答案: ${answer}`) // 只是記錄,不做真實處理
}
// 問題:無法測試真實的 Store 狀態更新
```
**後果**:
- 進度條不會真實更新
- Store 狀態不會改變
- 無法發現狀態同步問題
## 🎯 重構設計規格
### 目標:打造**專業的複習系統開發工具**
#### 核心需求:
1. **真實模擬**: 完整模擬生產環境的複習流程
2. **動態資料**: 可動態匯入、重置、切換測試資料
3. **狀態監控**: 即時顯示所有 Store 狀態
4. **調試功能**: 提供開發者需要的調試工具
## 🏗️ 新架構設計
### 整體頁面架構
```
複習系統設計工具
├── 控制面板 (ControlPanel)
│ ├── 資料管理區
│ │ ├── 匯入測試資料按鈕
│ │ ├── 重置 Store 狀態按鈕
│ │ ├── 切換測試資料集下拉選單
│ │ └── Store 狀態重置按鈕
│ ├── 模擬控制區
│ │ ├── 開始複習模擬按鈕
│ │ ├── 暫停/繼續按鈕
│ │ └── 結束模擬按鈕
│ └── 快速測試區
│ ├── 單一組件測試模式
│ └── 完整流程測試模式
├── 複習模擬器 (ReviewSimulator)
│ ├── 真實的 ReviewRunner 組件
│ ├── 真實的進度條和導航
│ └── 真實的狀態管理
└── 調試面板 (DebugPanel)
├── Store 狀態監控 (即時)
├── 答題歷史記錄
├── 性能指標顯示
└── 錯誤日誌
```
### 1. 資料管理系統設計
#### 動態資料匯入機制
```typescript
interface TestDataManager {
// 測試資料集管理
availableDatasets: TestDataset[]
currentDataset: TestDataset | null
// 動態操作
importDataset(dataset: TestDataset): void
resetStores(): void
switchDataset(datasetId: string): void
// 預定義場景
loadScenario(scenario: TestScenario): void
}
// 測試場景定義
type TestScenario =
| 'empty' // 空資料測試
| 'single-card' // 單詞卡測試
| 'full-session' // 完整會話測試
| 'error-cases' // 錯誤情況測試
| 'performance' // 性能測試
```
#### 測試資料結構
```typescript
interface TestDataset {
id: string
name: string
description: string
flashcards: MockFlashcard[]
scenarios: {
completedTests?: CompletedTest[]
userProfile?: UserProfile
errorConditions?: ErrorCondition[]
}
}
```
### 2. 真實複習模擬器設計
#### 完整Store整合
```typescript
const ReviewSimulator = () => {
// 使用真實的 Store,不是模擬
const reviewSession = useReviewSessionStore()
const testQueue = useTestQueueStore()
const testResult = useTestResultStore()
const reviewData = useReviewDataStore()
const reviewUI = useReviewUIStore()
// 真實的初始化流程
const initializeSimulation = async (dataset: TestDataset) => {
// 1. 重置所有 Store
reviewSession.resetSession()
testQueue.resetQueue()
testResult.resetScore()
reviewData.resetData()
// 2. 載入測試資料到 ReviewDataStore
reviewData.setDueCards(dataset.flashcards)
// 3. 觸發真實的佇列初始化
testQueue.initializeTestQueue(dataset.flashcards, dataset.scenarios.completedTests || [])
// 4. 設置第一張卡片
if (dataset.flashcards.length > 0) {
reviewSession.setCurrentCard(dataset.flashcards[0])
}
}
return (
Session Store
{JSON.stringify({
mounted: sessionState.mounted,
currentCard: sessionState.currentCard?.id,
mode: sessionState.mode,
isLoading: sessionState.isLoading,
error: sessionState.error
}, null, 2)}
Queue Store
{JSON.stringify({
totalTests: queueState.testItems.length,
currentIndex: queueState.currentTestIndex,
currentMode: queueState.currentMode,
completedCount: queueState.testItems.filter(t => t.isCompleted).length,
skippedCount: queueState.testItems.filter(t => t.isSkipped).length
}, null, 2)}
Result Store
{JSON.stringify(resultState.score, null, 2)}
)
}
```
### 4. 操作控制面板設計
#### 資料管理控制
```typescript
const DataControlPanel = () => {
const [selectedDataset, setSelectedDataset] = useState