優化應用 APP 新增、編輯邏輯

This commit is contained in:
2025-08-06 16:33:11 +08:00
parent dc4594a4cd
commit af88c0f037
100 changed files with 5592 additions and 7160 deletions

View File

@@ -0,0 +1,185 @@
# 詳細 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 數據結構不一致的問題,確保編輯功能能夠正確顯示資料庫中的實際值而非預設資料。修正後的系統將提供一致且準確的數據顯示體驗。