dramaling-vocab-learning/後端DifficultyLevel盤點報告.md

4.2 KiB
Raw Blame History

DramaLing 後端 DifficultyLevel 欄位移除執行報告

執行狀態:後端清理完成

執行日期2025-09-30 執行狀態 後端清理完成,前端更新待執行 主要成果:成功移除 difficulty_level 欄位,統一使用 difficulty_level_numeric

📊 執行摘要

  • 後端檔案修改: 2個檔案
  • 建立 Migration: 移除 difficulty_level 欄位
  • 資料庫狀態: 成功更新,僅保留數字格式
  • API 測試: 正常運作
  • 前端影響: 22個檔案需要後續更新

已完成的修改

1 核心資料模型 (已完成 )

Database Context

  • /backend/DramaLing.Api/Data/DramaLingDbContext.cs
    • 修改: 移除第 133 行的 DifficultyLevel 映射
    • 結果: 統一使用 DifficultyLevelNumeric 映射

Migration

  • 建立新 Migration: 20250930145636_RemoveDifficultyLevelStringColumn.cs
    • 功能: 移除資料庫中的 difficulty_level 欄位
    • 執行狀態: 成功執行,資料庫已更新

Entity (無需修改)

  • /backend/DramaLing.Api/Models/Entities/Flashcard.cs
    • 現狀: 僅定義 DifficultyLevelNumeric 屬性
    • 說明: Entity 層已經是數字格式,無需修改

2 API 相容性 (保持運作 )

DTO 層向後相容

  • /backend/DramaLing.Api/Models/DTOs/FlashcardDto.cs
    • 現狀: 使用 DifficultyLevelNumeric 作為主要欄位
    • 相容性: 提供 DifficultyLevel 計算屬性確保向後相容
    • 驗證: 改用 [Range(0, 6)] 數字範圍驗證

API 測試結果

  • GET /api/flashcards - 正常回應
  • 建置測試 - 無編譯錯誤
  • 服務啟動 - 正常啟動,無錯誤

🔄 下一步:前端更新計劃

📋 待更新的前端檔案 (22個)

基於先前的搜尋結果,以下前端檔案使用了 difficultyLevel 字串格式,需要改為 difficultyLevelNumeric 數字格式:

核心類型與服務 (優先處理)

  1. /frontend/types/review.ts
  2. /frontend/lib/services/flashcards.ts
  3. /frontend/lib/services/studySession.ts

Store 與狀態管理

  1. /frontend/store/useTestQueueStore.ts
  2. /frontend/store/useReviewSessionStore.ts

主要頁面

  1. /frontend/app/flashcards/page.tsx
  2. /frontend/app/flashcards/[id]/page.tsx
  3. /frontend/app/generate/page.tsx
  4. /frontend/app/review-design/page.tsx

核心組件

  1. /frontend/components/FlashcardForm.tsx
  2. /frontend/components/ClickableTextV2.tsx
  3. /frontend/components/CardSelectionDialog.tsx

其他組件與工具

13-22. 其他 10 個檔案...

🔧 建議的前端更新步驟

第一步:建立轉換工具

// frontend/lib/utils/cefrUtils.ts
export const cefrToNumeric = (level: string): number => {
  const map: Record<string, number> = {
    'A1': 1, 'A2': 2, 'B1': 3, 'B2': 4, 'C1': 5, 'C2': 6
  };
  return map[level?.toUpperCase()] || 0;
};

export const numericToCefr = (level: number): string => {
  const map: Record<number, string> = {
    1: 'A1', 2: 'A2', 3: 'B1', 4: 'B2', 5: 'C1', 6: 'C2'
  };
  return map[level] || 'Unknown';
};

第二步:更新類型定義

interface WordData {
  // difficultyLevel: string;  // 移除
  difficultyLevelNumeric: number;  // 新增
}

📊 執行完成總結

已完成的工作

  1. 移除 DbContext 映射 - 統一使用數字格式
  2. 建立 Migration - 成功移除 difficulty_level 欄位
  3. 執行資料庫更新 - 資料庫結構已更新
  4. 測試後端 API - 確認 API 正常運作

🎯 主要成果

  • 後端統一使用 difficultyLevelNumeric 數字格式 (0-6)
  • 移除了資料庫中的 difficulty_level 字串欄位
  • 保持 API 向後相容性
  • 系統正常運作,無錯誤

📝 下一步行動

  • 前端檔案漸進式更新 (22 個檔案)
  • 建立前端 CEFR 轉換工具
  • 全面測試前端功能

報告完成時間: 2025-09-30 23:01 執行狀態: 後端清理完成,前端更新待執行