381 lines
8.3 KiB
Markdown
381 lines
8.3 KiB
Markdown
# DramaLing 後端開發計劃
|
|
|
|
## 📋 現況評估
|
|
|
|
### ✅ 已完成項目
|
|
1. **前端 Prototype** - 完整的 UI/UX 流程
|
|
2. **功能需求文檔** - 詳細的功能規格
|
|
3. **資料模型設計** - 基本的數據結構
|
|
4. **API 規格** - 初步的 API 端點設計
|
|
5. **用戶流程** - 完整的業務邏輯流程
|
|
|
|
### ❌ 缺失項目
|
|
1. **詳細的資料庫 Schema**
|
|
2. **API 認證與授權機制細節**
|
|
3. **第三方服務整合規格**
|
|
4. **錯誤處理與日誌規範**
|
|
5. **效能與擴展性要求**
|
|
6. **部署與 DevOps 流程**
|
|
|
|
## 🎯 後端開發計劃
|
|
|
|
### Phase 1: 基礎架構設置 (第1週)
|
|
|
|
#### 1.1 專案初始化
|
|
```bash
|
|
# 技術棧
|
|
- Framework: Next.js 14 API Routes
|
|
- Database: Supabase (PostgreSQL)
|
|
- Authentication: NextAuth.js + Supabase Auth
|
|
- ORM: Prisma
|
|
- Validation: Zod
|
|
- API Documentation: Swagger/OpenAPI
|
|
```
|
|
|
|
#### 1.2 需要完成的規格文檔
|
|
- [ ] **資料庫 Schema 詳細設計**
|
|
- 所有表格結構
|
|
- 索引設計
|
|
- 關聯關係
|
|
- 資料遷移策略
|
|
|
|
- [ ] **環境配置規格**
|
|
- 開發/測試/生產環境變數
|
|
- 資料庫連接配置
|
|
- 第三方服務 API Keys
|
|
|
|
#### 1.3 實作任務
|
|
- [ ] 設置 Supabase 專案
|
|
- [ ] 配置 Prisma ORM
|
|
- [ ] 建立資料庫 Schema
|
|
- [ ] 設置環境變數管理
|
|
- [ ] 配置 TypeScript 類型定義
|
|
|
|
### Phase 2: 認證系統 (第1-2週)
|
|
|
|
#### 2.1 需要的規格
|
|
- [ ] **認證流程詳細設計**
|
|
```typescript
|
|
interface AuthSpec {
|
|
// Email/Password 註冊流程
|
|
emailRegistration: {
|
|
validation: ValidationRules
|
|
emailVerification: VerificationProcess
|
|
welcomeEmail: EmailTemplate
|
|
}
|
|
|
|
// OAuth 整合
|
|
googleOAuth: {
|
|
scopes: string[]
|
|
dataMapping: UserDataMapping
|
|
errorHandling: ErrorScenarios
|
|
}
|
|
|
|
// Session 管理
|
|
sessionManagement: {
|
|
tokenExpiry: TokenExpiryRules
|
|
refreshStrategy: RefreshTokenStrategy
|
|
deviceManagement: MultiDevicePolicy
|
|
}
|
|
}
|
|
```
|
|
|
|
- [ ] **安全性規格**
|
|
- 密碼加密策略
|
|
- Rate limiting 規則
|
|
- CORS 設定
|
|
- CSRF 保護
|
|
|
|
#### 2.2 實作任務
|
|
- [ ] 實作註冊 API
|
|
- [ ] 實作登入/登出 API
|
|
- [ ] 整合 Google OAuth
|
|
- [ ] 實作 Email 驗證
|
|
- [ ] 實作忘記密碼功能
|
|
- [ ] Session/Token 管理
|
|
|
|
### Phase 3: 核心業務邏輯 (第2-3週)
|
|
|
|
#### 3.1 AI 詞卡生成系統
|
|
|
|
**需要的規格:**
|
|
- [ ] **Gemini API 整合規格**
|
|
```typescript
|
|
interface GeminiIntegration {
|
|
apiKey: string
|
|
model: 'gemini-pro' | 'gemini-pro-vision'
|
|
|
|
prompts: {
|
|
textAnalysis: PromptTemplate
|
|
vocabularyExtraction: PromptTemplate
|
|
exampleGeneration: PromptTemplate
|
|
}
|
|
|
|
rateLimit: {
|
|
requestsPerMinute: number
|
|
tokensPerRequest: number
|
|
retryStrategy: RetryPolicy
|
|
}
|
|
|
|
errorHandling: {
|
|
apiErrors: ErrorMapping
|
|
fallbackStrategy: FallbackOptions
|
|
}
|
|
}
|
|
```
|
|
|
|
- [ ] **詞卡生成邏輯**
|
|
- 文本分析算法
|
|
- 難度評估規則
|
|
- 重複詞彙處理
|
|
- 批量生成優化
|
|
|
|
#### 3.2 學習系統
|
|
|
|
**需要的規格:**
|
|
- [ ] **SM-2 算法實現細節**
|
|
```typescript
|
|
interface SM2Algorithm {
|
|
// 初始參數
|
|
initialInterval: number
|
|
easinessFactor: number
|
|
|
|
// 計算規則
|
|
calculateNextReview: (rating: 1-5, currentInterval: number) => Date
|
|
updateEasinessFactor: (rating: 1-5, currentEF: number) => number
|
|
|
|
// 特殊情況處理
|
|
handleOverdue: (daysOverdue: number) => Adjustment
|
|
handleStreaks: (consecutiveCorrect: number) => Bonus
|
|
}
|
|
```
|
|
|
|
- [ ] **學習進度追蹤**
|
|
- 學習記錄存儲結構
|
|
- 統計數據計算方法
|
|
- 成就系統規則
|
|
|
|
#### 3.3 實作任務
|
|
- [ ] Gemini API 整合
|
|
- [ ] 詞卡生成 API
|
|
- [ ] 卡組管理 CRUD API
|
|
- [ ] SM-2 算法實現
|
|
- [ ] 學習記錄 API
|
|
- [ ] 統計數據 API
|
|
|
|
### Phase 4: 資料管理 (第3-4週)
|
|
|
|
#### 4.1 需要的規格
|
|
|
|
- [ ] **資料驗證規則**
|
|
```typescript
|
|
// 每個 API 端點的輸入驗證
|
|
const schemas = {
|
|
createFlashcard: z.object({
|
|
word: z.string().min(1).max(100),
|
|
translation: z.string().min(1).max(200),
|
|
example: z.string().max(500),
|
|
// ...
|
|
}),
|
|
// 其他 schemas...
|
|
}
|
|
```
|
|
|
|
- [ ] **資料存取層設計**
|
|
- Repository Pattern 實現
|
|
- 查詢優化策略
|
|
- 快取策略
|
|
|
|
- [ ] **批量操作規格**
|
|
- 批量導入限制
|
|
- 批量更新策略
|
|
- 事務處理規則
|
|
|
|
#### 4.2 實作任務
|
|
- [ ] 實作資料驗證中間件
|
|
- [ ] 建立 Repository 層
|
|
- [ ] 實作快取機制
|
|
- [ ] 批量操作 API
|
|
- [ ] 資料導出功能
|
|
|
|
### Phase 5: 第三方整合 (第4週)
|
|
|
|
#### 5.1 需要的規格
|
|
|
|
- [ ] **Email 服務整合**
|
|
```typescript
|
|
interface EmailService {
|
|
provider: 'Resend' | 'SendGrid'
|
|
templates: {
|
|
welcome: EmailTemplate
|
|
verification: EmailTemplate
|
|
passwordReset: EmailTemplate
|
|
learningReminder: EmailTemplate
|
|
}
|
|
sendingRules: {
|
|
retryPolicy: RetryPolicy
|
|
bounceHandling: BounceStrategy
|
|
}
|
|
}
|
|
```
|
|
|
|
- [ ] **支付系統整合** (未來功能)
|
|
- Stripe/綠界設置
|
|
- 訂閱方案邏輯
|
|
- 支付 Webhook 處理
|
|
|
|
- [ ] **分析服務整合**
|
|
- Google Analytics 事件
|
|
- 自定義指標追蹤
|
|
- 用戶行為分析
|
|
|
|
#### 5.2 實作任務
|
|
- [ ] Email 服務設置
|
|
- [ ] Email 模板實作
|
|
- [ ] 分析事件追蹤
|
|
- [ ] 錯誤追蹤 (Sentry)
|
|
|
|
### Phase 6: 效能與安全 (第5週)
|
|
|
|
#### 6.1 需要的規格
|
|
|
|
- [ ] **API Rate Limiting**
|
|
```typescript
|
|
interface RateLimiting {
|
|
rules: {
|
|
global: { requests: number, window: string }
|
|
perUser: { requests: number, window: string }
|
|
perEndpoint: Map<string, LimitRule>
|
|
}
|
|
storage: 'memory' | 'redis'
|
|
response: {
|
|
headers: RateLimitHeaders
|
|
errorMessage: string
|
|
}
|
|
}
|
|
```
|
|
|
|
- [ ] **安全性措施**
|
|
- SQL Injection 防護
|
|
- XSS 防護
|
|
- Input Sanitization
|
|
- API Key 管理
|
|
|
|
- [ ] **效能優化**
|
|
- 資料庫查詢優化
|
|
- N+1 問題解決
|
|
- API Response 壓縮
|
|
- CDN 設置
|
|
|
|
#### 6.2 實作任務
|
|
- [ ] 實作 Rate Limiting
|
|
- [ ] 安全中間件設置
|
|
- [ ] 查詢優化
|
|
- [ ] 快取策略實作
|
|
- [ ] 監控設置
|
|
|
|
### Phase 7: 測試與部署 (第5-6週)
|
|
|
|
#### 7.1 需要的規格
|
|
|
|
- [ ] **測試策略**
|
|
```typescript
|
|
interface TestStrategy {
|
|
unitTests: {
|
|
coverage: number // 目標: 80%
|
|
framework: 'Jest'
|
|
}
|
|
integrationTests: {
|
|
apiEndpoints: string[]
|
|
scenarios: TestScenario[]
|
|
}
|
|
e2eTests: {
|
|
userFlows: string[]
|
|
framework: 'Cypress' | 'Playwright'
|
|
}
|
|
}
|
|
```
|
|
|
|
- [ ] **部署流程**
|
|
- CI/CD Pipeline
|
|
- 環境變數管理
|
|
- 資料庫遷移策略
|
|
- 零停機部署
|
|
|
|
- [ ] **監控與日誌**
|
|
- 錯誤監控
|
|
- 效能監控
|
|
- 日誌聚合
|
|
- 告警設置
|
|
|
|
#### 7.2 實作任務
|
|
- [ ] 撰寫單元測試
|
|
- [ ] 撰寫整合測試
|
|
- [ ] 設置 CI/CD
|
|
- [ ] 部署到 Vercel
|
|
- [ ] 監控系統設置
|
|
|
|
## 📊 資源需求
|
|
|
|
### 技術資源
|
|
- **Supabase**: Free tier → Pro ($25/月)
|
|
- **Gemini API**: Free tier (60 requests/minute)
|
|
- **Vercel**: Free tier → Pro ($20/月)
|
|
- **Email Service**: Resend free tier (100/day)
|
|
- **Monitoring**: Sentry free tier
|
|
|
|
### 時間預估
|
|
- **總開發時間**: 5-6 週
|
|
- **每週工時**: 40 小時
|
|
- **總工時**: 200-240 小時
|
|
|
|
### 風險評估
|
|
1. **Gemini API 限制**: 需要實作 queue 系統
|
|
2. **資料庫效能**: 需要適當的索引設計
|
|
3. **成本控制**: 監控 API 使用量
|
|
4. **安全風險**: 定期安全審計
|
|
|
|
## 🚀 下一步行動
|
|
|
|
### 立即需要完成的規格文檔
|
|
1. **資料庫 Schema 完整設計** (2天)
|
|
2. **API 端點詳細規格** (2天)
|
|
3. **Gemini API 整合規格** (1天)
|
|
4. **認證流程詳細設計** (1天)
|
|
5. **錯誤處理規範** (1天)
|
|
|
|
### 開發優先順序
|
|
1. 🔴 **必要**: 認證系統、基本 CRUD、AI 生成
|
|
2. 🟡 **重要**: 學習系統、統計功能
|
|
3. 🟢 **可選**: 進階功能、優化
|
|
|
|
## 📝 檢查清單
|
|
|
|
### Week 1
|
|
- [ ] 完成所有規格文檔
|
|
- [ ] 設置開發環境
|
|
- [ ] 建立資料庫
|
|
- [ ] 實作認證 API
|
|
|
|
### Week 2-3
|
|
- [ ] 完成核心 API
|
|
- [ ] 整合 Gemini
|
|
- [ ] 實作學習邏輯
|
|
|
|
### Week 4-5
|
|
- [ ] 第三方服務整合
|
|
- [ ] 效能優化
|
|
- [ ] 安全加固
|
|
|
|
### Week 6
|
|
- [ ] 完整測試
|
|
- [ ] 部署上線
|
|
- [ ] 監控設置
|
|
|
|
## 🎯 成功指標
|
|
|
|
1. **功能完整性**: 100% 核心功能實作
|
|
2. **效能指標**: API 響應 < 200ms
|
|
3. **可靠性**: 99.9% uptime
|
|
4. **安全性**: 通過 OWASP 基本檢查
|
|
5. **測試覆蓋**: > 80% 代碼覆蓋率 |