dramaling-vocab-learning/docs/03_development/dotnet-completion-plan.md

454 lines
15 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.

# .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
<PackageReference Include="Google.AI.GenerativeAI" Version="1.0.0-beta" />
```
### 第四步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