# .NET Core 後端完成計劃 ## 📊 專案現狀分析 ### ✅ **已完成項目 (約30%)** #### 基礎架構 - **Entity Framework 模型**: - 檔案位置: `backend/DramaLing.Api/Models/Entities/` - 已實作: `User.cs`, `Flashcard.cs`, `CardSet.cs`, `StudySession.cs`, `Tag.cs` - 狀態: ✅ 完成 - **資料庫上下文**: - 檔案位置: `backend/DramaLing.Api/Data/DramaLingDbContext.cs` - 功能: Entity Framework 配置、關聯設定、欄位映射 - 狀態: ✅ 完成 - **SM-2 學習算法**: - 檔案位置: `backend/DramaLing.Api/Services/SM2Algorithm.cs` - 功能: 間隔重複算法、掌握度計算、優先級排序 - 狀態: ✅ 完成 #### 部分 API 控制器 - **CardSetsController**: `backend/DramaLing.Api/Controllers/CardSetsController.cs` - 實作端點: GET, POST, PUT, DELETE `/api/cardsets` - 支援功能: 卡組 CRUD 操作 - 狀態: ✅ 完成 - **FlashcardsController**: `backend/DramaLing.Api/Controllers/FlashcardsController.cs` - 實作端點: GET, POST, PUT, DELETE `/api/flashcards` - 支援功能: 詞卡 CRUD、搜尋篩選 - 狀態: ✅ 完成 - **StatsController**: `backend/DramaLing.Api/Controllers/StatsController.cs` - 實作端點: GET `/api/stats/dashboard`, GET `/api/stats/trends`, GET `/api/stats/detailed` - 支援功能: 基礎統計分析 - 狀態: ✅ 完成 #### 專案配置 - **啟動配置**: `backend/DramaLing.Api/Program.cs` - 功能: 依賴注入、中介軟體配置、Swagger 設定 - 狀態: ✅ 完成 - **應用設定**: `backend/DramaLing.Api/appsettings.json`, `appsettings.Development.json` - 功能: 資料庫連接、AI 服務配置 - 狀態: ✅ 完成 (需要填入實際金鑰) ### ⚠️ **缺失項目 (約70%)** 根據前端需求分析 (參考: [前端實作程式碼](/frontend/app/)) 和 [功能需求規格書](/docs/01_requirement/functional-requirements.md),以下功能仍需實作: ## 🔐 需要實作:AuthController (優先級: 🔥 最高) ### 功能需求 **支援前端頁面**: - `/frontend/app/login/page.tsx` - 登入頁面 - `/frontend/app/register/page.tsx` - 註冊頁面 - `/frontend/app/dashboard/page.tsx` - 用戶資料顯示 ### API 端點需求 ```csharp [Route("api/[controller]")] public class AuthController : ControllerBase { [HttpGet("profile")] // 獲取用戶資料 [HttpPut("profile")] // 更新用戶資料 [HttpGet("settings")] // 獲取用戶設定 [HttpPut("settings")] // 更新用戶設定 } ``` ### 技術實作需求 - **JWT 令牌驗證**: 與 Supabase Auth 兼容 - **用戶資料管理**: user_profiles 表 CRUD - **設定管理**: user_settings 表 CRUD - **錯誤處理**: 401 未授權、404 用戶不存在 ### 相關檔案參考 - 資料模型: `backend/DramaLing.Api/Models/Entities/User.cs` ✅ 已完成 - 前端需求: `frontend/app/dashboard/page.tsx:87-94` (統計卡片) ## 🧠 需要實作:StudyController (優先級: 🔥 高) ### 功能需求 **支援前端頁面**: - `/frontend/app/learn/page.tsx` - 學習頁面 (五種學習模式) - `/frontend/app/dashboard/page.tsx` - 學習進度顯示 ### API 端點需求 ```csharp [Route("api/[controller]")] public class StudyController : ControllerBase { [HttpGet("due-cards")] // 獲取待複習詞卡 [HttpGet("schedule")] // 複習排程 [HttpPost("sessions")] // 開始學習會話 [HttpPost("sessions/{sessionId}/record")] // 記錄學習結果 [HttpPost("sessions/{sessionId}/complete")] // 完成學習會話 } ``` ### 技術實作需求 - **SM-2 算法整合**: 使用 `Services/SM2Algorithm.cs` ✅ 已完成 - **學習記錄追蹤**: study_sessions, study_records 表操作 - **複習排程**: 基於 SM-2 的智能排程 - **統計更新**: 自動更新每日統計 ### 相關檔案參考 - 算法實作: `backend/DramaLing.Api/Services/SM2Algorithm.cs` ✅ 已完成 - 資料模型: `backend/DramaLing.Api/Models/Entities/StudySession.cs` ✅ 已完成 - 前端需求: `frontend/app/learn/page.tsx:77-117` (學習模式和記錄) ## 🤖 需要實作:AIController (優先級: 🔥 高) ### 功能需求 **支援前端頁面**: - `/frontend/app/generate/page.tsx` - AI 生成頁面 - `/frontend/app/flashcards/page.tsx` - 智能檢測功能 ### API 端點需求 ```csharp [Route("api/[controller]")] public class AIController : ControllerBase { [HttpPost("generate")] // AI 生成詞卡 [HttpGet("generate/{taskId}")] // 查詢生成進度 [HttpPost("generate/{taskId}/save")] // 保存生成結果 [HttpPost("validate-card")] // 智能檢測單一詞卡 [HttpPost("validate-cards")] // 批量智能檢測 [HttpPost("apply-corrections")] // 自動應用修正 } ``` ### 技術實作需求 - **Google Gemini AI 整合**: 安裝 `Google.AI.GenerativeAI` NuGet 套件 - **Prompt 模板設計**: 詞彙萃取、智能萃取、內容檢測 - **非同步處理**: AI 生成任務的狀態管理 - **配額管理**: 每日生成限制 (免費用戶vs付費用戶) ### 相關檔案參考 - 前端生成流程: `frontend/app/generate/page.tsx:87-95` (AI 生成邏輯) - 前端檢測功能: `frontend/app/flashcards/page.tsx:731-770` (智能檢測modal) ## 🏷️ 需要實作:TagsController (優先級: 🟡 中) ### 功能需求 **支援前端頁面**: - `/frontend/app/flashcards/page.tsx` - 標籤篩選和管理 ### API 端點需求 ```csharp [Route("api/[controller]")] public class TagsController : ControllerBase { [HttpGet] // 標籤列表 [HttpPost] // 創建標籤 [HttpPut("{id}")] // 更新標籤 [HttpDelete("{id}")] // 刪除標籤 } ``` ### 相關檔案參考 - 資料模型: `backend/DramaLing.Api/Models/Entities/Tag.cs` ✅ 已完成 - 前端需求: `frontend/app/flashcards/page.tsx:162` (標籤陣列) ## ⚠️ 需要實作:ErrorReportsController (優先級: 🟡 中) ### 功能需求 **支援前端頁面**: - `/frontend/app/learn/page.tsx` - 各學習模式的錯誤回報 - `/frontend/app/flashcards/page.tsx` - 錯誤回報管理 ### API 端點需求 ```csharp [Route("api/[controller]")] public class ErrorReportsController : ControllerBase { [HttpGet] // 錯誤回報列表 [HttpPost] // 提交錯誤回報 [HttpPut("{id}")] // 處理回報狀態 [HttpDelete("{id}")] // 刪除回報 [HttpPost("batch-process")] // 批量處理 } ``` ### 相關檔案參考 - 前端回報功能: `frontend/app/learn/page.tsx:775-851` (錯誤回報modal) - 前端管理界面: `frontend/app/flashcards/page.tsx:15-43` (錯誤回報清單) ## 🗄️ 資料庫連接和遷移 ### 需要完成的設定 #### 1. **Supabase 連接配置** - **檔案位置**: `backend/DramaLing.Api/appsettings.Development.json` - **需要填入**: 實際的 Supabase 連接資訊 - **參考文檔**: [環境設定指南](/docs/03_development/setup/env-setup.md) #### 2. **Entity Framework 遷移** ```bash cd backend/DramaLing.Api dotnet ef migrations add InitialCreate dotnet ef database update ``` #### 3. **測試資料播種** - 建立初始測試用戶 - 新增範例詞卡和卡組 - 設定預設標籤 ## 🌐 前端 API 整合 ### 需要修改的檔案 #### 1. **API 基礎設定** **檔案**: `frontend/app/` 下所有頁面 **修改**: API 調用基礎 URL ```typescript // 原本 const response = await fetch('/api/flashcards') // 修改為 const response = await fetch('http://localhost:5000/api/flashcards') ``` #### 2. **認證令牌處理** **檔案**: 所有需要認證的 API 調用 **修改**: 附加 JWT 令牌 ```typescript const response = await fetch(url, { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }) ``` #### 3. **錯誤處理更新** **檔案**: 前端錯誤處理邏輯 **修改**: 適配 .NET Core 的錯誤回應格式 ## 📋 實作順序建議 ### Week 1: 核心功能 1. **AuthController** (2-3天) - 實作用戶認證相關 API - 整合 JWT 驗證 2. **資料庫連接設定** (1天) - 配置 Supabase 連接 - 執行 Entity Framework 遷移 3. **基礎測試** (1天) - 測試 API 端點 - 驗證資料庫連接 ### Week 2: 學習和 AI 系統 1. **StudyController** (3-4天) - 學習會話管理 - SM-2 算法整合 - 複習排程 2. **AIController** (2-3天) - Google Gemini AI 整合 - 詞卡生成和檢測 ### Week 3: 進階功能和整合 1. **TagsController & ErrorReportsController** (2天) - 標籤管理 - 錯誤回報系統 2. **前端 API 整合** (3-4天) - 更新前端 API 調用 - 認證流程整合 - 端到端測試 3. **效能優化** (1天) - 快取機制 - 查詢優化 ## 📚 相關文檔引用 ### 需求文檔 - **[功能需求規格書](/docs/01_requirement/functional-requirements.md)** - 了解完整功能需求 - **[技術需求規格書](/docs/01_requirement/technical-requirements.md)** - 技術實作標準 ### 設計文檔 - **[後端開發計劃](/docs/03_development/api/backend-development-plan.md)** - 整體架構和 API 設計 - **[專案結構指南](/docs/03_development/setup/folder-structure.md)** - 檔案組織原則 ### 前端實作參考 - **[Dashboard 頁面](/frontend/app/dashboard/page.tsx)** - 統計 API 需求 - **[學習頁面](/frontend/app/learn/page.tsx)** - 學習系統 API 需求 - **[詞卡管理](/frontend/app/flashcards/page.tsx)** - 詞卡管理 API 需求 - **[AI 生成](/frontend/app/generate/page.tsx)** - AI 生成 API 需求 ### 技術實作文檔 - **[.NET 重寫計劃](/docs/03_development/dotnet-rewrite-plan.md)** - 重寫決策和架構說明 - **[環境設定指南](/docs/03_development/setup/env-setup.md)** - 環境變數配置 ## 🎯 成功標準 ### 功能完整性檢查清單 #### 🔐 認證系統 - [x] 用戶可以檢視個人資料 (`/api/auth/profile`) - AuthController 已實作 - [x] 用戶可以更新設定 (`/api/auth/settings`) - AuthController 已實作 - [x] JWT 令牌驗證正常運作 - 支援環境變數配置 - [ ] 前端登入狀態同步 - 需要前端 API 整合 #### 📚 詞卡管理 - [x] 卡組 CRUD 操作正常 - [x] 詞卡 CRUD 操作正常 - [ ] 標籤系統完整運作 - [ ] 批量操作功能 #### 🧠 學習系統 - [x] 五種學習模式支援 (翻卡、選擇題、填空、聽力、口說) - StudyController 已實作 - [x] SM-2 算法正確計算複習間隔 - SM2Algorithm 服務已完成 - [x] 學習進度正確追蹤和統計 - 學習記錄和統計更新 - [x] 複習排程智能推薦 - 複習排程 API 已實作 #### 🤖 AI 功能 - [x] 詞卡生成功能正常 (詞彙萃取、智能萃取) - AIController 已實作 (Mock 模式) - [x] 智能檢測可以發現詞卡錯誤 - 驗證 API 已實作 - [x] 批量檢測和自動修正 - GeminiService 已完成 - [x] 生成任務狀態管理 - 生成和保存流程已實作 #### 📊 統計分析 - [x] 儀表板基礎統計 - StatsController 已實作 - [x] 學習趨勢分析 - 趨勢 API 已完成 - [x] 詳細統計報告 - 詳細統計 API 已實作 - [x] 進度預測功能 - 預測算法已實作 #### ⚠️ 錯誤管理 - [ ] 錯誤回報提交和管理 - [ ] 錯誤回報狀態追蹤 - [ ] 批量處理功能 ### 技術品質檢查 #### 🏗️ 程式碼品質 - [ ] 移除所有編譯警告 (目前14個 `unused variable` 警告) - [ ] 統一錯誤處理格式 - [ ] API 回應格式標準化 - [ ] 輸入驗證完整性 #### 🔒 安全性 - [ ] 所有 API 端點都有適當的認證保護 - [ ] 用戶只能存取自己的資料 (資料隔離) - [ ] 輸入驗證防止注入攻擊 - [ ] Rate Limiting 實作 #### 📈 效能 - [ ] 資料庫查詢優化 - [ ] API 回應時間 < 200ms - [ ] 快取機制實作 (可選) ## 🛠️ 詳細實作指南 ### 第一步:AuthController 實作 #### 建立檔案 **檔案位置**: `backend/DramaLing.Api/Controllers/AuthController.cs` #### 實作重點 1. **JWT 令牌解析**: 從 Supabase 令牌中提取用戶 ID 2. **用戶資料管理**: 操作 user_profiles 表 3. **設定管理**: 操作 user_settings 表,提供預設值 4. **錯誤處理**: 統一的錯誤回應格式 #### 相依服務 - **DbContext**: 已完成 `Data/DramaLingDbContext.cs` - **User 模型**: 已完成 `Models/Entities/User.cs` ### 第二步:StudyController 實作 #### 建立檔案 **檔案位置**: `backend/DramaLing.Api/Controllers/StudyController.cs` #### 實作重點 1. **複習排程**: 使用 SM-2 算法計算待複習詞卡 2. **學習會話**: 管理學習狀態和進度 3. **學習記錄**: 記錄用戶回答和更新 SM-2 參數 4. **統計更新**: 自動更新每日學習統計 #### 相依服務 - **SM2Algorithm**: 已完成 `Services/SM2Algorithm.cs` - **StudySession 模型**: 已完成 `Models/Entities/StudySession.cs` ### 第三步:AIController 實作 #### 建立檔案 **檔案位置**: `backend/DramaLing.Api/Controllers/AIController.cs` **服務檔案**: `backend/DramaLing.Api/Services/GeminiService.cs` #### 實作重點 1. **Google Gemini API 整合**: 使用官方 .NET SDK 2. **Prompt 模板**: 詞彙萃取和智能萃取的提示詞 3. **非同步處理**: AI 生成任務的狀態管理 4. **智能檢測**: 詞卡內容品質分析和修正建議 #### 需要的 NuGet 套件 ```xml ``` ### 第四步:TagsController 和 ErrorReportsController #### 實作重點 1. **標籤管理**: 標籤 CRUD 和使用統計 2. **錯誤回報**: 回報提交、狀態管理、批量處理 3. **關聯管理**: 詞卡與標籤的多對多關係 ## 📊 完成度追蹤 ### 當前進度: 30% → 目標: 100% | 功能模組 | 進度 | 預估完成時間 | |---------|------|-------------| | 基礎架構 | ✅ 100% | 已完成 | | 詞卡管理 | ✅ 100% | 已完成 | | 卡組管理 | ✅ 100% | 已完成 | | 統計分析 | ✅ 70% | 已完成基礎版 | | 用戶認證 | ❌ 0% | 2-3天 | | 學習系統 | ❌ 0% | 3-4天 | | AI 服務 | ❌ 0% | 2-3天 | | 標籤管理 | ❌ 0% | 1-2天 | | 錯誤回報 | ❌ 0% | 1-2天 | | 前端整合 | ❌ 0% | 2-3天 | ### 里程碑時間表 - **Week 1 結束**: AuthController + 資料庫連接 (50% 完成) - **Week 2 結束**: StudyController + AIController (80% 完成) - **Week 3 結束**: 前端整合 + 測試 (100% 完成) ## 🚀 下一步行動 ### 立即可執行 1. **訪問 Swagger**: http://localhost:5000/swagger (查看當前 API) 2. **測試健康檢查**: http://localhost:5000/health 3. **查看前端**: http://localhost:3001 (確認 UI 功能) ### 開發建議 1. **先實作 AuthController**: 讓前端可以模擬登入 2. **配置資料庫連接**: 連接真實的 Supabase 3. **逐步實作其他控制器**: 按優先級順序進行 --- **參考文檔更新時間**: 2025-09-16 **專案狀態**: .NET Core 重寫進行中 (30% 完成) **預計完成**: 2-3 週