# AI 評分整合功能總結

## 概述

已成功將 AI 評分結果整合到資料庫存儲系統中。當用戶上傳 PPT 文件並點擊「開始 AI 評審」按鈕時，系統會自動將所有相關資料上傳到資料庫的三個主要表中。

## 整合的資料庫表

### 1. projects 表
- **用途**: 儲存專案基本資訊
- **創建時機**: AI 分析開始前
- **主要欄位**:
  - `id`: 專案唯一識別碼
  - `user_id`: 用戶 ID
  - `template_id`: 評分標準模板 ID
  - `title`: 專案標題
  - `description`: 專案描述
  - `status`: 專案狀態 (analyzing → completed)
  - `analysis_started_at`: 分析開始時間
  - `analysis_completed_at`: 分析完成時間

### 2. project_files 表
- **用途**: 儲存上傳的文件資訊
- **創建時機**: 文件上傳後，AI 分析前
- **主要欄位**:
  - `id`: 文件唯一識別碼
  - `project_id`: 關聯的專案 ID
  - `original_name`: 原始文件名稱
  - `file_name`: 儲存的文件名稱
  - `file_path`: 文件儲存路徑
  - `file_size`: 文件大小
  - `file_type`: 文件類型
  - `mime_type`: MIME 類型
  - `upload_status`: 上傳狀態
  - `upload_progress`: 上傳進度

### 3. evaluations 表
- **用途**: 儲存 AI 評審的基本資訊
- **創建時機**: AI 分析完成後
- **主要欄位**:
  - `id`: 評審唯一識別碼
  - `project_id`: 關聯的專案 ID
  - `overall_score`: 總分
  - `max_possible_score`: 滿分
  - `grade`: 等級評定
  - `analysis_duration`: 分析耗時
  - `ai_model_version`: AI 模型版本
  - `status`: 評審狀態
  - `error_message`: 錯誤訊息

### 4. evaluation_scores 表
- **用途**: 儲存各項評分標準的詳細分數
- **創建時機**: AI 分析完成後
- **主要欄位**:
  - `id`: 評分記錄唯一識別碼
  - `evaluation_id`: 關聯的評審 ID
  - `criteria_item_id`: 關聯的評分標準項目 ID
  - `score`: 得分
  - `max_score`: 滿分
  - `weight`: 權重
  - `weighted_score`: 加權分數
  - `percentage`: 得分百分比

### 5. evaluation_feedback 表
- **用途**: 儲存 AI 的評語和建議
- **創建時機**: AI 分析完成後
- **主要欄位**:
  - `id`: 反饋記錄唯一識別碼
  - `evaluation_id`: 關聯的評審 ID
  - `criteria_item_id`: 關聯的評分標準項目 ID (可為空)
  - `feedback_type`: 反饋類型 (overall/criteria/strength/improvement)
  - `content`: 反饋內容
  - `sort_order`: 排序順序

## 處理流程

### 1. 用戶操作
1. 用戶訪問上傳頁面 (`/upload`)
2. 上傳 PPT 文件
3. 填寫專案標題和描述
4. 點擊「開始 AI 評審」按鈕

### 2. 後端處理
1. **驗證輸入**: 檢查必填欄位和文件格式
2. **載入評分標準**: 從資料庫獲取評分標準模板
3. **創建專案記錄**: 在 `projects` 表中創建專案記錄
4. **處理文件上傳**: 在 `project_files` 表中創建文件記錄
5. **AI 分析**: 使用 Gemini AI 分析 PPT 內容
6. **上傳評審結果**: 將 AI 分析結果上傳到資料庫
   - 創建 `evaluations` 記錄
   - 創建 `evaluation_scores` 記錄
   - 創建 `evaluation_feedback` 記錄
7. **更新專案狀態**: 將專案狀態設為完成
8. **返回結果**: 將評分結果返回給前端

### 3. 前端顯示
1. 接收評分結果
2. 儲存到 localStorage
3. 導向到結果頁面 (`/results`)
4. 顯示評分結果和圖表

## 技術實現

### 修改的文件
- `app/api/evaluate/route.ts`: 主要的 API 端點，整合了資料庫上傳功能

### 關鍵功能
- **錯誤處理**: 即使資料庫上傳失敗，也會返回 AI 分析結果
- **資料轉換**: 將資料庫格式轉換為 AI 服務期望的格式
- **完整日誌**: 詳細的控制台日誌記錄整個處理過程
- **狀態管理**: 正確管理專案和評審的狀態

### 資料庫關聯
- `projects` ← `project_files` (一對多)
- `projects` ← `evaluations` (一對一)
- `evaluations` ← `evaluation_scores` (一對多)
- `evaluations` ← `evaluation_feedback` (一對多)
- `criteria_items` ← `evaluation_scores` (一對多)
- `criteria_items` ← `evaluation_feedback` (一對多)

## 測試和驗證

### 測試腳本
- `scripts/test-integration.js`: 提供完整的測試指南和檢查要點

### 驗證要點
1. 控制台日誌顯示完整的處理流程
2. 資料庫正確創建所有相關記錄
3. 前端正確顯示評分結果
4. 沒有錯誤或異常
5. 處理時間在合理範圍內

## 使用方式

1. 確保資料庫連線正常
2. 確保有評分標準模板
3. 啟動應用程式: `npm run dev`
4. 訪問上傳頁面: `http://localhost:3000/upload`
5. 上傳 PPT 文件並填寫專案資訊
6. 點擊「開始 AI 評審」按鈕
7. 查看結果頁面顯示的評分結果

## 注意事項

- 所有資料庫操作都包含在 try-catch 區塊中
- 即使資料庫上傳失敗，AI 分析結果仍會返回給用戶
- 專案狀態會正確更新為完成狀態
- 支援多種文件格式 (PPT, PDF, 影片等)
- 包含完整的錯誤處理和日誌記錄
