# 後端複習系統清空執行計劃 **目標**: 完全移除當前後端複雜的複習系統程式碼,準備重新實施簡潔版本 **日期**: 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(); // builder.Services.AddScoped(); // builder.Services.AddScoped(); // builder.Services.Configure(...); ``` ### **第六階段:簡化資料模型** 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 StudySessions 🗑️ 刪除 - DbSet StudyCards 🗑️ 刪除 - DbSet 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 小時 **風險等級**: 🟡 中等 **回滾準備**: ✅ 已準備 **執行狀態**: 📋 **待執行**