dramaling-vocab-learning/後端複習系統清空執行計劃.md

514 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 後端複習系統清空執行計劃
**目標**: 完全移除當前後端複雜的複習系統程式碼,準備重新實施簡潔版本
**日期**: 2025-09-29
**執行範圍**: DramaLing.Api 後端專案
**風險等級**: 🟡 中等 (需要仔細執行以避免破壞核心功能)
---
## 🎯 **清空目標與範圍**
### **清空目標**
1. **移除複雜的智能複習邏輯**: 包含 Session 概念、複雜隊列管理
2. **保留核心詞卡功能**: 基本 CRUD 和簡單統計
3. **為重新實施做準備**: 清潔的代碼基礎
### **保留功能**
- ✅ 詞卡基本 CRUD (FlashcardsController)
- ✅ 用戶認證 (AuthController)
- ✅ AI 分析服務 (AIController)
- ✅ 音訊服務 (AudioController)
- ✅ 圖片生成 (ImageGenerationController)
- ✅ 基礎統計 (StatsController)
---
## 🗄️ **資料庫結構盤點**
### **複習系統相關資料表**
```sql
📊 當前資料庫表結構分析:
需要保留的核心表:
├── user_profiles 用戶基本資料
├── flashcards 詞卡核心資料 (需簡化)
├── study_records 學習記錄 (需簡化)
├── daily_stats 每日統計
├── audio_cache 音訊快取
├── example_images 例句圖片
├── flashcard_example_images 詞卡圖片關聯
├── image_generation_requests 圖片生成請求
├── options_vocabularies 選項詞彙庫
├── error_reports 錯誤報告
└── sentence_analysis_cache 句子分析快取
需要處理的複習相關表:
├── study_sessions 學習會話表 🗑️ 刪除
├── study_cards 會話詞卡表 🗑️ 刪除
├── test_results 測驗結果表 🗑️ 刪除
└── pronunciation_assessments 發音評估 ⚠️ 檢查關聯
```
### **資料庫遷移文件**
```
📁 Migrations/
├── 20250926053105_AddStudyCardAndTestResult.cs 🗑️ 需要回滾
├── 20250926053105_AddStudyCardAndTestResult.Designer.cs 🗑️ 需要回滾
├── 20250926061341_AddStudyRecordUniqueIndex.cs ⚠️ 可能保留
├── 20250926061341_AddStudyRecordUniqueIndex.Designer.cs ⚠️ 可能保留
└── 其他遷移文件 ✅ 保留
```
### **資料庫清理策略**
1. **StudyRecord 表處理**:
-**保留基本結構**: 作為簡化的學習記錄
- 🔧 **移除複雜欄位**: SM-2 相關的追蹤欄位
- ⚠️ **保留核心欄位**: user_id, flashcard_id, study_mode, is_correct, studied_at
2. **複雜表結構移除**:
- 🗑️ **study_sessions**: 完全移除 (Session 概念)
- 🗑️ **study_cards**: 完全移除 (Session 相關)
- 🗑️ **test_results**: 完全移除 (與 StudyRecord 重複)
3. **遷移文件處理**:
- 📝 **創建回滾遷移**: 移除 study_sessions, study_cards, test_results 表
-**保留核心遷移**: StudyRecord 基本結構保留
---
## 📋 **完整清空文件清單**
### 🗑️ **需要完全刪除的文件**
#### **服務層文件**
```
📁 Services/
├── SpacedRepetitionService.cs 🗑️ 完全刪除 (8,574 bytes)
├── ReviewTypeSelectorService.cs 🗑️ 完全刪除 (8,887 bytes)
├── ReviewModeSelector.cs 🗑️ 完全刪除 (2,598 bytes)
├── QuestionGeneratorService.cs 🗑️ 檢查後可能刪除
└── BlankGenerationService.cs 🗑️ 檢查後可能刪除
```
#### **DTO 相關文件**
```
📁 Models/DTOs/SpacedRepetition/
├── ReviewModeResult.cs 🗑️ 完全刪除
├── ReviewRequest.cs 🗑️ 完全刪除
├── ReviewResult.cs 🗑️ 完全刪除
└── 整個 SpacedRepetition 資料夾 🗑️ 完全刪除
```
#### **配置文件**
```
📁 Models/Configuration/
└── SpacedRepetitionOptions.cs 🗑️ 完全刪除
```
#### **實體文件**
```
📁 Models/Entities/
├── StudySession.cs 🗑️ 完全刪除 (如存在)
├── StudyCard.cs 🗑️ 完全刪除 (如存在)
└── TestResult.cs 🗑️ 完全刪除 (如存在)
```
### ⚠️ **需要大幅簡化的文件**
#### **控制器文件**
```
📁 Controllers/
└── StudyController.cs 🔧 大幅簡化
├── 移除所有智能複習 API (due, next-review, optimal-mode, question, review)
├── 保留基礎統計 (stats)
├── 保留測驗記錄 (record-test, completed-tests)
└── 移除複雜的 Session 邏輯
```
#### **核心配置文件**
```
📁 根目錄文件
├── Program.cs 🔧 移除複習服務註冊
├── DramaLingDbContext.cs 🔧 移除複習相關配置
└── appsettings.json 🔧 移除 SpacedRepetition 配置
```
#### **實體文件**
```
📁 Models/Entities/
├── Flashcard.cs 🔧 簡化複習相關屬性
├── User.cs ✅ 基本保持不變
└── StudyRecord.cs 🔧 簡化為基礎記錄
```
---
## 🔍 **詳細清空步驟**
### **第一階段:停止服務並備份**
1. **停止當前運行的服務**
```bash
# 停止所有後端服務
pkill -f "dotnet run"
```
2. **創建備份分支** (可選)
```bash
git checkout -b backup/before-review-cleanup
git add .
git commit -m "backup: 清空前的複習系統狀態備份"
```
### **第二階段:刪除服務層文件**
```bash
# 刪除智能複習服務
rm Services/SpacedRepetitionService.cs
rm Services/ReviewTypeSelectorService.cs
rm Services/ReviewModeSelector.cs
# 檢查並決定是否刪除
# rm Services/QuestionGeneratorService.cs # 可能被選項詞彙庫使用
# rm Services/BlankGenerationService.cs # 可能被其他功能使用
```
### **第三階段:刪除 DTO 和配置文件**
```bash
# 刪除整個 SpacedRepetition DTO 資料夾
rm -rf Models/DTOs/SpacedRepetition/
# 刪除配置文件
rm Models/Configuration/SpacedRepetitionOptions.cs
```
### **第四階段:簡化 StudyController**
需要手動編輯 `Controllers/StudyController.cs`
```csharp
// 移除的內容:
- 智能複習服務依賴注入 (ISpacedRepetitionService, IReviewTypeSelectorService )
- 智能複習 API 方法 (GetDueCards, GetNextReview, GetOptimalReviewMode, GenerateQuestion, SubmitReview)
- 複雜的 Session 相關邏輯
// 保留的內容:
- 基礎統計 (GetStudyStats)
- 測驗記錄 (RecordTestCompletion, GetCompletedTests)
- 基礎認證和日誌功能
```
### **第五階段:清理 Program.cs 服務註冊**
```csharp
// 移除的服務註冊:
// builder.Services.AddScoped<ISpacedRepetitionService, SpacedRepetitionService>();
// builder.Services.AddScoped<IReviewTypeSelectorService, ReviewTypeSelectorService>();
// builder.Services.AddScoped<IQuestionGeneratorService, QuestionGeneratorService>();
// builder.Services.Configure<SpacedRepetitionOptions>(...);
```
### **第六階段:簡化資料模型**
1. **簡化 Flashcard.cs**
```csharp
// 移除的屬性:
- ReviewHistory
- LastQuestionType
- 複雜的 SM-2 算法屬性 (可選保留基礎的)
// 保留的屬性:
- 基本詞卡內容 (Word, Translation, Definition 等)
- 基礎學習狀態 (MasteryLevel, TimesReviewed)
- 基礎複習間隔 (NextReviewDate, IntervalDays)
```
2. **簡化 StudyRecord.cs**
```csharp
// 保留簡化版本:
- 基本測驗記錄 (FlashcardId, TestType, IsCorrect)
- 移除複雜的 SM-2 追蹤參數
```
### **第七階段:資料庫結構清理**
#### **7.1 清理 DramaLingDbContext.cs**
```csharp
// 移除的 DbSet
- DbSet<StudySession> StudySessions 🗑️ 刪除
- DbSet<StudyCard> StudyCards 🗑️ 刪除
- DbSet<TestResult> TestResults 🗑️ 刪除
// 移除的 ToTable 配置:
- .ToTable("study_sessions") 🗑️ 刪除
- .ToTable("study_cards") 🗑️ 刪除
- .ToTable("test_results") 🗑️ 刪除
// 移除的關聯配置:
- StudySession User 的關聯
- StudyCard StudySession 的關聯
- TestResult StudyCard 的關聯
- PronunciationAssessment StudySession 的關聯
// 簡化 StudyRecord 配置:
- 移除複雜的 SM-2 追蹤欄位配置
- 保留基本的 user_id, flashcard_id, study_mode 索引
```
#### **7.2 創建資料庫清理遷移**
```bash
# 創建新的遷移來移除複雜表結構
dotnet ef migrations add RemoveComplexStudyTables
# 在遷移中執行:
migrationBuilder.DropTable("study_sessions");
migrationBuilder.DropTable("study_cards");
migrationBuilder.DropTable("test_results");
# 移除 PronunciationAssessment 中的 StudySessionId 欄位
migrationBuilder.DropColumn("study_session_id", "pronunciation_assessments");
```
#### **7.3 清理配置文件**
```json
// appsettings.json - 移除的配置段落:
- "SpacedRepetition": { ... } 🗑️ 完全移除
```
#### **7.4 簡化 Flashcard 實體**
```csharp
// Flashcard.cs - 移除的複習相關屬性:
- ReviewHistory (JSON 複習歷史) 🗑️ 移除
- LastQuestionType 🗑️ 移除
- 複雜的 SM-2 追蹤欄位 (可選保留基礎的) ⚠️ 檢查
// 保留的基本屬性:
- EasinessFactor, Repetitions, IntervalDays 保留 (基礎複習間隔)
- NextReviewDate, MasteryLevel 保留 (基本狀態)
- TimesReviewed, TimesCorrect 保留 (統計)
```
---
## 🧹 **清空後的目標架構**
### **簡化後的 API 端點**
```
📍 保留的端點:
├── /api/flashcards/* 詞卡 CRUD (6個端點)
├── /api/auth/* 用戶認證 (4個端點)
├── /api/ai/* AI 分析 (3個端點)
├── /api/audio/* 音訊服務 (4個端點)
├── /api/ImageGeneration/* 圖片生成 (4個端點)
├── /api/stats/* 統計分析 (3個端點)
└── /api/study/* 簡化學習 (2個端點)
├── GET /stats 學習統計
└── POST /record-test 測驗記錄
❌ 移除的端點:
├── /api/study/due (複雜的到期詞卡邏輯)
├── /api/study/next-review (複雜的下一張邏輯)
├── /api/study/{id}/optimal-mode (智能模式選擇)
├── /api/study/{id}/question (題目生成)
├── /api/study/{id}/review (複習結果提交)
└── 所有 Session 相關端點
```
### **簡化後的服務層**
```
📦 保留的服務:
├── AuthService 認證服務
├── GeminiService AI 分析
├── AnalysisService 句子分析
├── AzureSpeechService 語音服務
├── AudioCacheService 音訊快取
├── ImageGenerationOrchestrator 圖片生成
├── ImageStorageService 圖片儲存
├── UsageTrackingService 使用追蹤
└── OptionsVocabularyService 選項詞彙庫
❌ 移除的服務:
├── SpacedRepetitionService 間隔重複算法
├── ReviewTypeSelectorService 複習題型選擇
├── ReviewModeSelector 複習模式選擇
├── StudySessionService 學習會話管理
└── 相關的介面檔案
```
### **簡化後的資料模型**
```
📊 核心實體 (簡化版)
├── User 基本用戶資料
├── Flashcard 基本詞卡 (移除複雜複習屬性)
├── StudyRecord 簡化學習記錄
├── DailyStats 基礎統計
├── AudioCache 音訊快取
├── ExampleImage 例句圖片
├── OptionsVocabulary 選項詞彙庫
└── ErrorReport 錯誤報告
❌ 移除的實體:
├── StudySession 學習會話
├── StudyCard 會話詞卡
├── TestResult 測驗結果
└── 複雜的複習相關實體
```
---
## ⚡ **預期清空效果**
### **代碼量減少**
- **服務層**: 減少 ~20,000 行複雜邏輯
- **DTO 層**: 減少 ~1,000 行傳輸物件
- **控制器**: StudyController 從 583行 → ~100行
- **總計**: 預計減少 ~25,000 行複雜代碼
### **API 端點簡化**
- **移除端點**: 5-8 個複雜的智能複習端點
- **保留端點**: ~25 個核心功能端點
- **複雜度**: 從複雜多層依賴 → 簡單直接邏輯
### **系統複雜度**
- **服務依賴**: 從 8個複習服務 → 0個
- **資料實體**: 從 18個 → ~12個 核心實體
- **配置項目**: 從複雜參數配置 → 基本配置
---
## 🛡️ **風險控制措施**
### **清空前檢查**
1. **確認無前端依賴**: 檢查前端是否調用即將刪除的 API
2. **資料備份**: 確保重要資料已備份
3. **服務停止**: 確保所有相關服務已停止
### **分階段執行**
1. **先註解服務註冊**: 在 Program.cs 中註解掉服務,確保編譯通過
2. **逐步刪除文件**: 按依賴關係順序刪除
3. **驗證編譯**: 每階段後驗證系統可編譯
4. **功能測試**: 確保保留功能正常運作
### **回滾準備**
1. **Git 分支備份**: 清空前創建備份分支
2. **關鍵文件備份**: 手動備份重要配置文件
3. **快速恢復腳本**: 準備快速恢復命令
---
## 📝 **執行步驟檢查清單**
### **準備階段**
- [ ] 停止所有後端服務
- [ ] 創建 Git 備份分支
- [ ] 確認前端無依賴調用
- [ ] 備份關鍵配置文件
### **刪除階段**
- [ ] 註解 Program.cs 服務註冊
- [ ] 刪除 SpacedRepetition DTO 資料夾
- [ ] 刪除複習相關服務文件
- [ ] 刪除配置文件
- [ ] 簡化 StudyController
### **清理階段**
- [ ] 清理 DramaLingDbContext 配置
- [ ] 簡化 Flashcard 實體
- [ ] 移除 appsettings 複習配置
- [ ] 清理 using 語句
### **資料庫清理階段**
- [ ] 創建清理遷移檔案
- [ ] 執行資料庫清理遷移
- [ ] 驗證資料表結構正確
- [ ] 檢查資料完整性
- [ ] 清理過時的遷移文件
### **驗證階段**
- [ ] 編譯測試通過
- [ ] 基礎 API 功能正常
- [ ] 詞卡 CRUD 正常
- [ ] 認證功能正常
- [ ] 統計功能正常
- [ ] 資料庫查詢正常
### **完成階段**
- [ ] 提交清空變更
- [ ] 更新架構文檔
- [ ] 通知團隊清空完成
- [ ] 準備重新實施
---
## 🚀 **清空後的架構優勢**
### **簡潔性**
- **代碼可讀性**: 移除複雜邏輯後代碼更易理解
- **維護性**: 減少相互依賴,更易維護
- **除錯性**: 簡化的邏輯更容易除錯
### **可擴展性**
- **重新設計**: 為新的簡潔設計提供清潔基礎
- **模組化**: 功能模組更加獨立
- **測試友善**: 簡化的邏輯更容易測試
### **效能提升**
- **響應速度**: 移除複雜計算邏輯
- **記憶體使用**: 減少複雜物件實例
- **啟動速度**: 減少服務註冊和初始化
---
## ⚠️ **風險評估與緩解**
### **高風險項目**
1. **資料完整性**:
- **風險**: 刪除實體可能影響資料庫
- **緩解**: 先移除代碼引用,保留資料庫結構
2. **API 相容性**:
- **風險**: 前端可能調用被刪除的 API
- **緩解**: 清空前確認前端依賴關係
### **中風險項目**
1. **編譯錯誤**:
- **風險**: 刪除文件後可能有編譯錯誤
- **緩解**: 分階段執行,每步驗證編譯
2. **功能缺失**:
- **風險**: 意外刪除必要功能
- **緩解**: 仔細檢查文件依賴關係
---
## 📊 **清空進度追蹤**
### **進度指標**
- **文件刪除進度**: X / Y 個文件已刪除
- **代碼行數減少**: 當前 / 目標 行數
- **編譯狀態**: ✅ 通過 / ❌ 失敗
- **功能測試**: X / Y 個核心功能正常
### **完成標準**
- ✅ 所有複習相關文件已刪除
- ✅ 系統可正常編譯運行
- ✅ 核心功能 (詞卡 CRUD, 認證) 正常
- ✅ API 端點從 ~30個 減少到 ~20個
- ✅ 代碼複雜度大幅降低
---
## 🎉 **清空完成後的下一步**
### **立即後續工作**
1. **更新技術文檔**: 反映清空後的架構
2. **重新規劃**: 基於簡潔架構重新設計複習系統
3. **前端調整**: 調整前端 API 調用 (如有必要)
### **重新實施準備**
1. **需求重審**: 基於產品需求規格書重新設計
2. **技術選型**: 選擇更簡潔的實施方案
3. **組件化設計**: 按技術實作架構規格書實施
---
**執行負責人**: 開發團隊
**預計執行時間**: 2-4 小時
**風險等級**: 🟡 中等
**回滾準備**: ✅ 已準備
**執行狀態**: 📋 **待執行**