# DramaLing 詞卡管理功能產品需求規格書

## 1. 概述

### 1.1 文檔目的
本文檔定義了 DramaLing 詞卡管理功能的詳細產品需求規格，涵蓋詞卡的創建、編輯、組織、搜尋、篩選和管理等核心功能。

### 1.2 功能簡介
詞卡管理是 DramaLing 的核心功能之一，為用戶提供完整的詞卡生命週期管理，包括：
- 📝 詞卡新增與編輯
- 🔍 智能搜尋與篩選
- ⭐ 收藏與分類管理
- 📊 學習進度追蹤
- 🔄 批量操作功能

## 2. 用戶需求分析

### 2.1 用戶角色定義

#### 2.1.1 主要用戶
- **英語學習者**: 使用 DramaLing 學習英語詞彙的用戶
- **目標**: 有效管理和學習英語詞彙，提升英語水平
- **技能水平**: 具備基本的電腦操作能力，英語水平從初學者到高級

#### 2.1.2 用戶畫像
- **年齡**: 16-45歲
- **職業**: 學生、上班族、語言學習愛好者
- **使用場景**: 通勤時間、休息時間、專門的學習時段
- **設備**: 手機、平板、電腦
- **學習目標**: 考試準備、工作需要、興趣提升

### 2.2 用戶故事 (User Stories)

#### 2.2.1 詞卡檢視與瀏覽
```
作為一個英語學習者，
我想要瀏覽我所有的詞卡，
這樣我可以回顧我已經學習的詞彙。

驗收標準：
- 我可以看到詞卡列表，包含詞彙、翻譯、例句圖片
- 每個詞卡顯示 CEFR 難度等級和掌握度
- 我可以在「所有詞卡」和「收藏詞卡」之間切換
- 詞卡按創建時間排序顯示
```

#### 2.2.2 詞卡搜尋與篩選
```
作為一個英語學習者，
我想要快速找到特定的詞卡，
這樣我可以有效地複習特定的詞彙。

驗收標準：
- 我可以透過搜尋框輸入關鍵字搜尋詞彙、翻譯或定義
- 我可以使用進階篩選按 CEFR 等級、詞性、掌握度篩選
- 我可以使用快速篩選按鈕找到需要加強的詞卡
- 搜尋結果會高亮顯示關鍵字，並顯示找到的詞卡數量
```

#### 2.2.3 詞卡收藏管理
```
作為一個英語學習者，
我想要標記重要的詞卡為收藏，
這樣我可以優先複習重要的詞彙。

驗收標準：
- 我可以點擊星星圖標將詞卡加入收藏
- 已收藏的詞卡會顯示實心黃色星星
- 我可以在收藏分頁中查看所有收藏的詞卡
- 我可以隨時取消收藏某個詞卡
```

#### 2.2.4 詞卡編輯與管理
```
作為一個英語學習者，
我想要編輯或刪除詞卡，
這樣我可以更正錯誤或移除不需要的詞卡。

驗收標準：
- 我可以點擊編輯按鈕修改詞卡的任何欄位
- 我可以刪除不需要的詞卡，系統會要求確認
- 編輯後的詞卡會立即更新並保存
- 刪除操作會顯示成功或失敗的回饋訊息
```

#### 2.2.5 詞卡創建
```
作為一個英語學習者，
我想要手動創建新的詞卡，
這樣我可以將遇到的新詞彙加入學習列表。

驗收標準：
- 我可以點擊「新增詞卡」按鈕開啟創建表單
- 我可以填寫詞彙、翻譯、定義、發音、詞性、例句等欄位
- 提交後新詞卡會出現在詞卡列表中
- 如果有錯誤，系統會顯示明確的錯誤訊息
```

#### 2.2.6 詞卡詳細檢視
```
作為一個英語學習者，
我想要查看詞卡的完整詳細資訊，
這樣我可以深入了解詞彙的各種用法和學習狀態。

驗收標準：
- 我可以點擊「詳細」按鈕進入詞卡詳細頁面
- 詳細頁面顯示所有詞卡信息和學習統計
- 我可以在詳細頁面進行編輯或收藏操作
- 我可以查看學習記錄和複習歷史
```

### 2.3 用戶流程 (User Flows)

#### 2.3.1 詞卡瀏覽流程
```
用戶進入詞卡頁面 → 查看詞卡列表 → 選擇分頁(所有詞卡/收藏詞卡) → 瀏覽詞卡
                                    ↓
用戶可以執行以下操作：
- 點擊收藏/取消收藏
- 點擊編輯進入編輯模式
- 點擊刪除(需確認)
- 點擊詳細查看完整信息
- 點擊發音按鈕播放音頻
```

#### 2.3.2 詞卡搜尋流程
```
用戶進入詞卡頁面 → 點擊搜尋框 → 輸入關鍵字 → 查看即時篩選結果
                                    ↓
用戶可以進一步操作：
- 點擊「進階篩選」設定更多條件
- 使用快速篩選按鈕
- 清除搜尋條件
- 對搜尋結果執行詞卡操作
```

#### 2.3.3 詞卡創建流程
```
用戶進入詞卡頁面 → 點擊「新增詞卡」按鈕 → 填寫詞卡表單 → 點擊保存
                                        ↓
表單驗證：
- 成功：新詞卡出現在列表中，顯示成功訊息
- 失敗：顯示錯誤訊息，保持表單開啟狀態
```

#### 2.3.4 詞卡編輯流程
```
用戶選擇詞卡 → 點擊「編輯」按鈕 → 修改詞卡欄位 → 點擊保存
                                ↓
編輯驗證：
- 成功：詞卡更新，顯示成功訊息，關閉編輯表單
- 失敗：顯示錯誤訊息，保持編輯模式
```

#### 2.3.5 詞卡刪除流程
```
用戶選擇詞卡 → 點擊「刪除」按鈕 → 確認刪除對話框 → 用戶確認
                                ↓
刪除處理：
- 成功：詞卡從列表中移除，顯示成功訊息
- 失敗：顯示錯誤訊息，詞卡保持在列表中
```

#### 2.3.6 詞卡收藏管理流程
```
用戶瀏覽詞卡 → 點擊星星圖標 → 切換收藏狀態
                        ↓
收藏狀態更新：
- 加入收藏：星星變為實心黃色，顯示成功訊息
- 取消收藏：星星變為空心灰色，顯示成功訊息
- 在收藏分頁中即時更新詞卡列表
```

#### 2.3.7 AI 生成詞卡流程 (與其他頁面整合)
```
用戶在詞卡頁面 → 點擊「AI 生成詞卡」按鈕 → 跳轉到 /generate 頁面
                                          ↓
AI 分析流程：
用戶輸入句子 → AI 分析 → 查看分析結果 → 點擊保存詞卡 → 返回詞卡頁面查看
```

### 2.4 用戶體驗目標

#### 2.4.1 易用性目標
- **直觀操作**: 新用戶在 5 分鐘內能完成基本詞卡操作
- **快速搜尋**: 搜尋結果在 300ms 內顯示
- **清楚回饋**: 所有操作都有明確的成功/失敗回饋
- **一致設計**: 整個詞卡管理流程保持視覺和交互一致性

#### 2.4.2 效率目標
- **批量操作**: 支援多選和批量操作(未來功能)
- **鍵盤快捷鍵**: 支援 ESC 清除搜尋等常用快捷鍵
- **智能提示**: 搜尋框提供輸入建議(未來功能)
- **離線功能**: 基本瀏覽功能支援離線使用(未來功能)

## 3. 功能需求分析

### 3.1 核心功能模組

#### 3.1.1 詞卡展示頁面 (FlashcardsPage)
- **位置**: `/flashcards`
- **主要功能**: 集中管理和展示所有詞卡

##### 頁面佈局設計
1. **頁面標題區域**
   - 顯示 "我的詞卡" 標題
   - 新增詞卡按鈕 (手動創建)
   - AI 生成詞卡按鈕 (跳轉至 `/generate`)

2. **分頁標籤系統**
   - **所有詞卡**: 顯示用戶全部詞卡 (顯示詞卡總數)
   - **收藏詞卡**: 顯示已收藏的詞卡 (顯示收藏總數，⭐ 圖標)

3. **搜尋與篩選區域**
   - 主要搜尋框：支援詞彙、翻譯、定義的全文搜尋
   - 進階篩選選項 (可展開/收起)
   - 快速篩選按鈕組
   - 搜尋結果統計

#### 2.1.2 詞卡顯示格式
每個詞卡採用橫向卡片佈局，包含：

##### 左側區域
- **例句圖片**: 54x36 像素，展示詞彙使用情境
- **詞彙信息**:
  - 詞彙本身 (大字體粗體顯示)
  - 詞性標籤 (noun, verb, adjective 等)
  - 中文翻譯 (中等字體)
  - 發音符號與播放按鈕

##### 右上角
- **CEFR 難度標籤**: A1-C2 等級，使用顏色區分
  - A1: 綠色 (基礎)
  - A2: 藍色 (基礎)
  - B1: 黃色 (中級)
  - B2: 橙色 (中高級)
  - C1: 紅色 (高級)
  - C2: 紫色 (精通)

##### 右側操作區域
- **收藏按鈕**: 星星圖標，已收藏顯示黃色實心
- **編輯按鈕**: 編輯圖標，開啟編輯表單
- **刪除按鈕**: 垃圾桶圖標，需二次確認
- **詳細按鈕**: 箭頭圖標，導航至詞卡詳細頁面

##### 底部統計信息
- 創建日期
- 掌握度百分比

### 2.2 搜尋與篩選功能

#### 2.2.1 主要搜尋功能
```typescript
// 搜尋範圍
- 詞彙本身 (word)
- 中文翻譯 (translation)
- 英文定義 (definition)
- 例句內容 (example)
```

##### 搜尋增強功能
- **即時搜尋**: 輸入時即時過濾結果
- **高亮顯示**: 搜尋關鍵字在結果中高亮標示
- **清除功能**: 一鍵清除搜尋條件 (ESC 鍵或 X 按鈕)
- **結果統計**: 顯示找到的詞卡數量

#### 2.2.2 進階篩選選項

##### CEFR 等級篩選
```typescript
enum CEFRLevel {
  A1 = "A1 - 基礎",
  A2 = "A2 - 基礎",
  B1 = "B1 - 中級",
  B2 = "B2 - 中高級",
  C1 = "C1 - 高級",
  C2 = "C2 - 精通"
}
```

##### 詞性篩選
```typescript
enum PartOfSpeech {
  noun = "名詞 (noun)",
  verb = "動詞 (verb)",
  adjective = "形容詞 (adjective)",
  adverb = "副詞 (adverb)",
  preposition = "介詞 (preposition)",
  interjection = "感嘆詞 (interjection)"
}
```

##### 掌握程度篩選
```typescript
enum MasteryLevel {
  high = "已熟練 (80%+)",     // >= 80%
  medium = "學習中 (60-79%)", // 60-79%
  low = "需加強 (<60%)"       // < 60%
}
```

##### 收藏狀態篩選
- 檢查框選項："僅顯示收藏詞卡"
- 與星星圖標配合顯示

#### 2.2.3 快速篩選按鈕
提供常用篩選組合的快速按鈕：
- **需加強詞卡**: 自動設定掌握度 < 60%
- **收藏詞卡**: 自動篩選收藏項目
- **高級詞彙**: 自動設定 CEFR 等級為 C1/C2
- **清除全部**: 重置所有篩選條件

### 2.3 詞卡操作功能

#### 2.3.1 CRUD 操作

##### 新增詞卡
- **觸發方式**:
  - 手動新增按鈕 (開啟表單)
  - AI 生成詞卡 (從 `/generate` 頁面)
  - 批量導入 (未來功能)

##### 編輯詞卡
- **可編輯欄位**:
  ```typescript
  interface EditableFlashcard {
    word: string;           // 詞彙
    translation: string;    // 中文翻譯
    definition: string;     // 英文定義
    pronunciation: string;  // 發音符號
    partOfSpeech: string;   // 詞性
    example: string;        // 例句
    difficultyLevel: string; // CEFR 等級
  }
  ```

##### 刪除詞卡
- **安全機制**:
  - 二次確認對話框
  - 顯示詞彙名稱確認
  - 軟刪除機制 (可恢復，未來功能)

#### 2.3.2 收藏功能
- **收藏狀態切換**: 點擊星星圖標
- **視覺反饋**:
  - 未收藏: 灰色空心星星
  - 已收藏: 黃色實心星星
- **操作反饋**: 顯示操作成功/失敗訊息
- **收藏統計**: 在收藏分頁顯示總數

#### 2.3.3 詞卡詳細頁面
- **導航路徑**: `/flashcards/[id]`
- **顯示內容**:
  - 完整詞卡信息
  - 學習記錄統計
  - 複習歷史
  - 錯誤回報記錄

### 2.4 學習進度管理

#### 2.4.1 掌握度系統
```typescript
interface MasteryTracking {
  masteryLevel: number;      // 0-100% 掌握度
  timesReviewed: number;     // 複習次數
  nextReviewDate: string;    // 下次複習日期
  lastReviewDate?: string;   // 上次複習日期
  consecutiveCorrect: number; // 連續答對次數
}
```

#### 2.4.2 學習狀態指示
- **掌握度顏色編碼**:
  - < 60%: 紅色 (需加強)
  - 60-79%: 黃色 (學習中)
  - >= 80%: 綠色 (已熟練)

### 2.5 資料結構定義

#### 2.5.1 詞卡核心資料結構
```typescript
interface Flashcard {
  // 基本識別信息
  id: string;                    // 唯一識別碼
  createdAt: string;             // 創建時間
  updatedAt?: string;            // 更新時間

  // 詞彙基本信息
  word: string;                  // 詞彙本身
  translation: string;           // 中文翻譯
  definition: string;            // 英文定義
  pronunciation: string;         // 發音符號 (IPA)
  partOfSpeech: string;          // 詞性

  // 學習相關
  example: string;               // 例句
  exampleTranslation?: string;   // 例句翻譯
  difficultyLevel: string;       // CEFR 難度等級

  // 學習追蹤
  masteryLevel: number;          // 掌握度 (0-100)
  timesReviewed: number;         // 複習次數
  nextReviewDate: string;        // 下次複習日期

  // 用戶偏好
  isFavorite: boolean;           // 是否收藏
}
```

#### 2.5.2 API 服務結構
```typescript
class FlashcardsService {
  // 查詢操作
  getFlashcards(search?: string, favoritesOnly?: boolean): Promise<ApiResponse<{flashcards: Flashcard[], count: number}>>
  getFlashcard(id: string): Promise<ApiResponse<Flashcard>>

  // 修改操作
  createFlashcard(data: CreateFlashcardRequest): Promise<ApiResponse<Flashcard>>
  updateFlashcard(id: string, data: CreateFlashcardRequest): Promise<ApiResponse<Flashcard>>
  deleteFlashcard(id: string): Promise<ApiResponse<void>>

  // 特殊操作
  toggleFavorite(id: string): Promise<ApiResponse<void>>
}
```

## 3. 用戶介面規格

### 3.1 響應式設計要求

#### 3.1.1 桌面版 (>1024px)
- 詞卡列表：單欄佈局，每個詞卡橫向顯示
- 搜尋區域：完整展示所有篩選選項
- 操作按鈕：完整文字標籤

#### 3.1.2 平板版 (768-1024px)
- 詞卡圖片：適度縮小但保持清晰
- 篩選選項：可收縮式設計
- 操作按鈕：保持圖標+文字

#### 3.1.3 手機版 (<768px)
- 詞卡佈局：調整為垂直堆疊
- 搜尋功能：優先顯示主搜尋框
- 操作按鈕：僅顯示圖標，提供 tooltip

### 3.2 互動設計規範

#### 3.2.1 狀態回饋
- **載入狀態**: 顯示 "載入中..." 提示
- **空狀態**: 友善的空狀態提示 + 引導操作
- **錯誤狀態**: 清楚的錯誤信息 + 重試選項

#### 3.2.2 操作回饋
- **成功操作**: 綠色提示訊息，自動消失
- **失敗操作**: 紅色錯誤訊息，需手動關閉
- **確認操作**: 模態對話框，清楚的確認/取消選項

### 3.3 可訪問性要求
- **鍵盤導航**: 支援 Tab/Enter/Escape 鍵操作
- **螢幕閱讀器**: 適當的 ARIA 標籤和角色
- **對比度**: 符合 WCAG 2.1 AA 標準
- **文字大小**: 支援縮放至 200% 而不影響功能

## 4. 技術約束與架構

> 📋 **架構文檔引用**
>
> 本功能需求必須遵循既有的系統架構，完整技術規格請參考：
> - [系統架構總覽](../04_technical/system-architecture.md)
> - [後端架構詳細說明](../04_technical/backend-architecture.md)
> - [前端架構詳細說明](../04_technical/frontend-architecture.md)
> - [詞卡 API 規格](../04_technical/flashcard-api-specification.md)

### 4.1 技術架構約束

#### 前端技術限制
- **框架**: 必須使用 Next.js 15 with App Router
- **語言**: 必須使用 TypeScript
- **樣式**: 必須使用 Tailwind CSS
- **狀態管理**: 使用 React hooks (useState/useEffect)
- **API 通信**: 使用現有的 flashcardsService

#### 後端技術限制
- **框架**: 必須使用 ASP.NET Core 8.0
- **資料庫**: 必須使用 SQLite + Entity Framework Core
- **API 格式**: 必須遵循現有的 RESTful API 設計
- **認證**: 必須相容現有的 JWT 認證機制

#### 資料模型約束
- **詞卡模型**: 必須使用現有的 Flashcard.cs 實體
- **API 回應**: 必須遵循 `{success, data?, error?}` 格式
- **關聯設計**: 必須保持與 User、CardSet 的現有關聯

### 4.2 資料處理流程

#### 4.2.1 詞卡載入流程
```typescript
// 載入流程
loadFlashcards() -> flashcardsService.getFlashcards() -> setFlashcards(data)

// 錯誤處理
catch(error) -> setError(message) -> 顯示錯誤狀態
```

#### 4.2.2 搜尋篩選流程
```typescript
// 即時篩選
filteredCards = allCards.filter(card => {
  // 文字搜尋
  matchesText = word/translation/definition 包含關鍵字

  // 篩選條件
  matchesCEFR = 符合CEFR等級篩選
  matchesPartOfSpeech = 符合詞性篩選
  matchesMastery = 符合掌握度篩選
  matchesFavorite = 符合收藏狀態篩選

  return matchesText && matchesCEFR && ...
})
```

### 4.3 效能優化策略

#### 4.3.1 資料載入優化
- **分頁載入**: 避免一次載入過多詞卡
- **快取機制**: 本地快取搜尋結果
- **延遲載入**: 圖片使用 lazy loading

#### 4.3.2 搜尋效能優化
- **防抖處理**: 搜尋輸入 300ms 延遲
- **索引優化**: 預處理搜尋索引
- **記憶化**: 使用 useMemo 快取篩選結果

## 5. 資料存儲規格

### 5.1 後端 API 端點
```
GET    /api/flashcards              # 取得詞卡列表
GET    /api/flashcards/{id}         # 取得單一詞卡
POST   /api/flashcards              # 創建新詞卡
PUT    /api/flashcards/{id}         # 更新詞卡
DELETE /api/flashcards/{id}         # 刪除詞卡
POST   /api/flashcards/{id}/favorite # 切換收藏狀態
```

### 5.2 資料庫結構 (SQLite)
```sql
CREATE TABLE flashcards (
  id TEXT PRIMARY KEY,
  user_id TEXT NOT NULL,
  word TEXT NOT NULL,
  translation TEXT NOT NULL,
  definition TEXT NOT NULL,
  pronunciation TEXT,
  part_of_speech TEXT,
  example TEXT,
  example_translation TEXT,
  difficulty_level TEXT,
  mastery_level INTEGER DEFAULT 0,
  times_reviewed INTEGER DEFAULT 0,
  is_favorite BOOLEAN DEFAULT FALSE,
  next_review_date TEXT,
  created_at TEXT NOT NULL,
  updated_at TEXT,

  FOREIGN KEY (user_id) REFERENCES users(id)
);
```

## 6. 測試規格

### 6.1 功能測試用例

#### 6.1.1 詞卡顯示測試
- [ ] 詞卡列表正確載入和顯示
- [ ] CEFR 等級顏色正確顯示
- [ ] 收藏狀態正確顯示
- [ ] 掌握度百分比正確顯示

#### 6.1.2 搜尋功能測試
- [ ] 文字搜尋功能正常
- [ ] 搜尋結果高亮顯示
- [ ] 進階篩選功能正常
- [ ] 快速篩選按鈕功能正常
- [ ] 清除篩選功能正常

#### 6.1.3 詞卡操作測試
- [ ] 新增詞卡功能正常
- [ ] 編輯詞卡功能正常
- [ ] 刪除詞卡功能正常 (包含二次確認)
- [ ] 收藏切換功能正常
- [ ] 詳細頁面導航正常

### 6.2 效能測試要求
- [ ] 1000+ 詞卡載入時間 < 2秒
- [ ] 搜尋響應時間 < 300ms
- [ ] 篩選操作響應時間 < 100ms
- [ ] 記憶體使用合理 (< 100MB)

### 6.3 可用性測試要求
- [ ] 新用戶能在 5 分鐘內完成基本操作
- [ ] 搜尋功能直觀易用
- [ ] 錯誤訊息清楚明確
- [ ] 空狀態引導有效

## 7. 未來功能規劃

### 7.1 短期功能 (1-2個月)
- [ ] **批量操作**: 多選詞卡進行批量刪除、編輯
- [ ] **標籤系統**: 自定義標籤分類詞卡
- [ ] **排序功能**: 按創建時間、掌握度、複習頻率排序
- [ ] **匯入匯出**: CSV/JSON 格式的詞卡匯入匯出

### 7.2 中期功能 (3-6個月)
- [ ] **智能推薦**: 基於學習進度推薦複習詞卡
- [ ] **學習統計**: 詳細的學習進度圖表分析
- [ ] **協作功能**: 詞卡分享和協作編輯
- [ ] **離線功能**: 離線瀏覽和學習詞卡

### 7.3 長期功能 (6個月+)
- [ ] **AI 輔助**: 智能錯誤檢測和內容優化建議
- [ ] **多媒體支援**: 音訊、影片例句
- [ ] **社群功能**: 公共詞卡庫和評分系統
- [ ] **API 開放**: 第三方整合 API

## 8. 成功指標

### 8.1 功能完成度指標
- [ ] 所有核心功能 100% 實現
- [ ] 所有測試用例 100% 通過
- [ ] 零阻塞性 Bug

### 8.2 用戶體驗指標
- [ ] 詞卡載入時間 < 2秒
- [ ] 搜尋響應時間 < 300ms
- [ ] 用戶操作成功率 > 95%
- [ ] 錯誤恢復時間 < 5秒

### 8.3 業務指標
- [ ] 用戶詞卡創建數量增長
- [ ] 搜尋功能使用頻率
- [ ] 收藏功能使用率
- [ ] 用戶留存率提升

---

**文檔版本**: v1.0
**最後更新**: 2025-09-24
**文檔狀態**: 待審核
**負責人**: AI Assistant
**審核人**: 待指定