# 詳細 API 編輯功能修正報告 ## 問題描述 用戶報告在應用詳細視窗中點擊「編輯應用」按鈕時,創建者和所屬部門顯示的是預設資料而不是真正的資料庫數據。 ## 根本原因分析 ### 1. 詳細 API 與列表 API 的數據結構不一致 **列表 API (`/api/apps`)**: - `department: app.department` (來自 apps 表) - `creator.name: app.creator_name || app.user_creator_name` (優先使用 apps.creator_name) **詳細 API (`/api/apps/[id]`)**: - 缺少 `department` 欄位 - `creator.name: app.creator_name` (只使用 users.name) - `creator.department: app.creator_department` (使用用戶部門而非應用部門) ### 2. SQL 查詢不一致 **列表 API 查詢**: ```sql SELECT a.*, u.name as user_creator_name, -- 使用 user_creator_name u.email as user_creator_email, u.department as user_creator_department, u.role as creator_role FROM apps a LEFT JOIN users u ON a.creator_id = u.id ``` **詳細 API 查詢**: ```sql SELECT a.*, u.name as creator_name, -- 使用 creator_name u.email as creator_email, u.department as creator_department, u.role as creator_role FROM apps a LEFT JOIN users u ON a.creator_id = u.id ``` ## 修正方案 ### 1. 更新詳細 API 的 SQL 查詢 **修改前**: ```sql SELECT a.*, u.name as creator_name, u.email as creator_email, u.department as creator_department, u.role as creator_role ``` **修改後**: ```sql SELECT a.*, u.name as user_creator_name, -- 改為 user_creator_name u.email as creator_email, u.department as creator_department, u.role as creator_role ``` ### 2. 更新詳細 API 的回應格式 **修改前**: ```typescript const formattedApp = { // ... 其他欄位 creator: { id: app.creator_id, name: app.creator_name, // 只使用 users.name email: app.creator_email, department: app.creator_department, // 使用用戶部門 role: app.creator_role } } ``` **修改後**: ```typescript const formattedApp = { // ... 其他欄位 department: app.department, // 新增應用部門 icon: app.icon, // 新增圖示 iconColor: app.icon_color, // 新增圖示顏色 creator: { id: app.creator_id, name: app.creator_name || app.user_creator_name, // 優先使用 apps.creator_name email: app.creator_email, department: app.department || app.creator_department, // 優先使用應用部門 role: app.creator_role } } ``` ## 修正的檔案 ### `app/api/apps/[id]/route.ts` 1. **SQL 查詢修正**: - 將 `u.name as creator_name` 改為 `u.name as user_creator_name` - 保持與列表 API 一致的欄位命名 2. **回應格式修正**: - 新增 `department: app.department` 欄位 - 新增 `icon: app.icon` 和 `iconColor: app.icon_color` 欄位 - 修正 `creator.name` 優先使用 `app.creator_name` - 修正 `creator.department` 優先使用 `app.department` ## 測試驗證 ### 測試腳本:`scripts/test-detailed-api-logic.js` 模擬修正後的數據流程: ```javascript // 模擬資料庫值 const mockAppData = { app_department: 'MBU1', app_creator_name: '佩庭', user_department: 'ITBU', user_name: '系統管理員' }; // 模擬詳細 API 回應 const detailedAppData = { department: mockAppData.app_department, // MBU1 creator: { name: mockAppData.app_creator_name || mockAppData.user_name, // 佩庭 department: mockAppData.app_department || mockAppData.user_department // MBU1 } }; // 模擬 handleEditApp 處理 const result = handleEditApp(detailedAppData); // 結果:creator: '佩庭', department: 'MBU1' ``` ### 測試結果 ``` === Verification === Creator match: ✅ PASS Department match: ✅ PASS ``` ## 預期效果 修正後,當用戶在應用詳細視窗中點擊「編輯應用」按鈕時: 1. **創建者欄位**:顯示 `apps.creator_name` (如「佩庭」) 而非 `users.name` (如「系統管理員」) 2. **部門欄位**:顯示 `apps.department` (如「MBU1」) 而非 `users.department` (如「ITBU」) 3. **圖示欄位**:正確顯示 `apps.icon` 和 `apps.icon_color` 4. **類型欄位**:正確轉換英文 API 類型為中文顯示類型 ## 技術細節 ### 數據優先級 1. **創建者名稱**:`apps.creator_name` > `users.name` 2. **部門**:`apps.department` > `users.department` 3. **圖示**:`apps.icon` 和 `apps.icon_color` ### 向後兼容性 修正保持向後兼容性: - 如果 `apps.creator_name` 為空,仍會使用 `users.name` - 如果 `apps.department` 為空,仍會使用 `users.department` ## 部署注意事項 1. 清除瀏覽器快取以確保獲取最新的 API 回應 2. 重新測試編輯功能以驗證修正效果 3. 確認所有相關欄位都正確顯示資料庫中的實際值 ## 結論 此修正解決了詳細 API 與列表 API 數據結構不一致的問題,確保編輯功能能夠正確顯示資料庫中的實際值而非預設資料。修正後的系統將提供一致且準確的數據顯示體驗。