454 lines
15 KiB
Markdown
454 lines
15 KiB
Markdown
# .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 週 |