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

18 KiB
Raw Blame History

後端複習系統清空執行計劃

目標: 完全移除當前後端複雜的複習系統程式碼,準備重新實施簡潔版本 日期: 2025-09-29 執行範圍: DramaLing.Api 後端專案 風險等級: 🟡 中等 (需要仔細執行以避免破壞核心功能)


🎯 清空目標與範圍

清空目標

  1. 移除複雜的智能複習邏輯: 包含 Session 概念、複雜隊列管理
  2. 保留核心詞卡功能: 基本 CRUD 和簡單統計
  3. 為重新實施做準備: 清潔的代碼基礎

保留功能

  • 詞卡基本 CRUD (FlashcardsController)
  • 用戶認證 (AuthController)
  • AI 分析服務 (AIController)
  • 音訊服務 (AudioController)
  • 圖片生成 (ImageGenerationController)
  • 基礎統計 (StatsController)

🗄️ 資料庫結構盤點

複習系統相關資料表

📊 當前資料庫表結構分析:

 需要保留的核心表:
├── 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. 停止當前運行的服務

    # 停止所有後端服務
    pkill -f "dotnet run"
    
  2. 創建備份分支 (可選)

    git checkout -b backup/before-review-cleanup
    git add .
    git commit -m "backup: 清空前的複習系統狀態備份"
    

第二階段:刪除服務層文件

# 刪除智能複習服務
rm Services/SpacedRepetitionService.cs
rm Services/ReviewTypeSelectorService.cs
rm Services/ReviewModeSelector.cs

# 檢查並決定是否刪除
# rm Services/QuestionGeneratorService.cs    # 可能被選項詞彙庫使用
# rm Services/BlankGenerationService.cs      # 可能被其他功能使用

第三階段:刪除 DTO 和配置文件

# 刪除整個 SpacedRepetition DTO 資料夾
rm -rf Models/DTOs/SpacedRepetition/

# 刪除配置文件
rm Models/Configuration/SpacedRepetitionOptions.cs

第四階段:簡化 StudyController

需要手動編輯 Controllers/StudyController.cs

// 移除的內容:
- 智能複習服務依賴注入 (ISpacedRepetitionService, IReviewTypeSelectorService )
- 智能複習 API 方法 (GetDueCards, GetNextReview, GetOptimalReviewMode, GenerateQuestion, SubmitReview)
- 複雜的 Session 相關邏輯

// 保留的內容:
- 基礎統計 (GetStudyStats)
- 測驗記錄 (RecordTestCompletion, GetCompletedTests)
- 基礎認證和日誌功能

第五階段:清理 Program.cs 服務註冊

// 移除的服務註冊:
// builder.Services.AddScoped<ISpacedRepetitionService, SpacedRepetitionService>();
// builder.Services.AddScoped<IReviewTypeSelectorService, ReviewTypeSelectorService>();
// builder.Services.AddScoped<IQuestionGeneratorService, QuestionGeneratorService>();
// builder.Services.Configure<SpacedRepetitionOptions>(...);

第六階段:簡化資料模型

  1. 簡化 Flashcard.cs

    // 移除的屬性:
    - ReviewHistory
    - LastQuestionType
    - 複雜的 SM-2 算法屬性 (可選保留基礎的)
    
    // 保留的屬性:
    - 基本詞卡內容 (Word, Translation, Definition )
    - 基礎學習狀態 (MasteryLevel, TimesReviewed)
    - 基礎複習間隔 (NextReviewDate, IntervalDays)
    
  2. 簡化 StudyRecord.cs

    // 保留簡化版本:
    - 基本測驗記錄 (FlashcardId, TestType, IsCorrect)
    - 移除複雜的 SM-2 追蹤參數
    

第七階段:資料庫結構清理

7.1 清理 DramaLingDbContext.cs

// 移除的 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 創建資料庫清理遷移

# 創建新的遷移來移除複雜表結構
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 清理配置文件

// appsettings.json - 移除的配置段落:
- "SpacedRepetition": { ... }               🗑️ 完全移除

7.4 簡化 Flashcard 實體

// 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 小時 風險等級: 🟡 中等 回滾準備: 已準備 執行狀態: 📋 待執行