dramaling-vocab-learning/docs/01_requirement/technical-requirements.md

3.5 KiB

DramaLing 技術需求規格書

1. 技術架構

1.1 前端技術棧

  • 框架: Next.js 14+ (App Router)
  • 語言: TypeScript 5+
  • 樣式: Tailwind CSS 3+
  • UI 組件: shadcn/ui
  • 狀態管理: Zustand
  • 資料獲取: TanStack Query

1.2 後端技術棧

  • API Routes: Next.js API Routes
  • 資料庫: Supabase (PostgreSQL)
  • 認證: Supabase Auth
  • 檔案儲存: Supabase Storage
  • AI 服務: Google Gemini API

1.3 部署與基礎設施

  • 託管: Vercel
  • CDN: Vercel Edge Network
  • 監控: Vercel Analytics
  • 版本控制: GitHub

2. 資料庫架構

2.1 主要資料表

-- 用戶表
users (
  id UUID PRIMARY KEY,
  email VARCHAR(255) UNIQUE,
  created_at TIMESTAMP,
  updated_at TIMESTAMP
)

-- 詞卡表
flashcards (
  id UUID PRIMARY KEY,
  user_id UUID REFERENCES users(id),
  word VARCHAR(255),
  translation TEXT,
  context TEXT,
  example TEXT,
  difficulty INTEGER,
  created_at TIMESTAMP,
  next_review_date DATE,
  review_count INTEGER
)

-- 學習記錄表
study_sessions (
  id UUID PRIMARY KEY,
  user_id UUID REFERENCES users(id),
  flashcard_id UUID REFERENCES flashcards(id),
  rating INTEGER,
  studied_at TIMESTAMP
)

-- 標籤表
tags (
  id UUID PRIMARY KEY,
  name VARCHAR(100),
  user_id UUID REFERENCES users(id)
)

-- 詞卡標籤關聯表
flashcard_tags (
  flashcard_id UUID REFERENCES flashcards(id),
  tag_id UUID REFERENCES tags(id),
  PRIMARY KEY (flashcard_id, tag_id)
)

3. API 設計

3.1 RESTful API 端點

# 認證
POST   /api/auth/register
POST   /api/auth/login
POST   /api/auth/logout
GET    /api/auth/session

# 詞卡管理
GET    /api/flashcards
POST   /api/flashcards
GET    /api/flashcards/:id
PUT    /api/flashcards/:id
DELETE /api/flashcards/:id

# AI 生成
POST   /api/ai/generate-flashcard

# 學習統計
GET    /api/stats/overview
GET    /api/stats/progress

3.2 API 規格

  • JSON 格式回應
  • JWT Token 認證
  • Rate Limiting: 100 req/min
  • 錯誤處理標準化

4. 安全需求

4.1 認證與授權

  • Supabase Row Level Security (RLS)
  • JWT Token 過期時間: 7 天
  • Refresh Token 機制

4.2 資料保護

  • HTTPS Only
  • 環境變數管理
  • SQL Injection 防護
  • XSS Protection Headers

4.3 API 安全

  • CORS 設定
  • Rate Limiting
  • API Key 加密儲存

5. 效能需求

5.1 前端效能

  • Lighthouse Score > 90
  • First Contentful Paint < 1.5s
  • Time to Interactive < 3s
  • Code Splitting
  • Image Optimization

5.2 後端效能

  • API Response Time < 500ms
  • Database Query < 100ms
  • Caching Strategy (Redis/Memory)
  • Connection Pooling

6. 開發環境需求

6.1 必要工具

  • Node.js 18+
  • npm/pnpm
  • Git
  • VS Code

6.2 環境變數

# Supabase
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=

# Gemini AI
GEMINI_API_KEY=

# App
NEXT_PUBLIC_APP_URL=

7. 測試需求

7.1 測試類型

  • 單元測試 (Jest)
  • 整合測試 (React Testing Library)
  • E2E 測試 (Playwright)

7.2 測試覆蓋率

  • 程式碼覆蓋率 > 70%
  • 關鍵路徑 100% 覆蓋
  • CI/CD 自動化測試

8. 監控與日誌

8.1 監控指標

  • 應用程式錯誤率
  • API 回應時間
  • 資料庫效能
  • 用戶活躍度

8.2 日誌管理

  • 結構化日誌 (JSON)
  • 日誌級別分類
  • 錯誤追蹤 (Sentry)

9. 擴展性考量

9.1 橫向擴展

  • Serverless 架構
  • 資料庫讀寫分離
  • CDN 快取策略

9.2 垂直擴展

  • 資料庫索引優化
  • Query 優化
  • 非同步處理