feat: implement workload heatmap module

- Backend (FastAPI):
  - Workload heatmap API with load level calculation
  - User workload detail endpoint with task breakdown
  - Redis caching for workload calculations (1hr TTL)
  - Department isolation and access control
  - WorkloadSnapshot model for historical data
  - Alembic migration for workload_snapshots table

- API Endpoints:
  - GET /api/workload/heatmap - Team workload overview
  - GET /api/workload/user/{id} - User workload detail
  - GET /api/workload/me - Current user workload

- Load Levels:
  - normal: <80%, warning: 80-99%, overloaded: >=100%

- Tests:
  - 26 unit/API tests
  - 15 E2E automated tests
  - 77 total tests passing

- OpenSpec:
  - add-resource-workload change archived
  - resource-management spec updated

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
beabigegg
2025-12-29 01:13:21 +08:00
parent daca7798e3
commit 61fe01cb6b
17 changed files with 2517 additions and 30 deletions

View File

@@ -0,0 +1,75 @@
# Tasks: add-resource-workload
## Phase 1: 資料模型與基礎設施
- [x] **1.1** 建立 WorkloadSnapshot model (`backend/app/models/workload_snapshot.py`)
- [x] **1.2** 建立 Alembic migration 建立 `pjctrl_workload_snapshots`
- [x] **1.3** 建立 Workload schemas (`backend/app/schemas/workload.py`)
## Phase 2: 核心服務層
- [x] **2.1** 實作 `workload_service.py` 核心邏輯
- ISO 週計算函式
- 使用者週負載計算
- 負載等級判定normal/warning/overloaded
- [x] **2.2** 實作 Redis 快取整合
- 快取讀取/寫入
- TTL 設定
## Phase 3: API 端點
- [x] **3.1** 建立 workload router (`backend/app/api/workload/router.py`)
- [x] **3.2** 實作 `GET /api/workload/heatmap` - 團隊負載熱圖
- [x] **3.3** 實作 `GET /api/workload/user/{user_id}` - 使用者負載詳情
- [x] **3.4** 實作 `GET /api/workload/me` - 當前使用者負載(替代 3.4 的容量更新)
- [x] **3.5** 註冊 workload router 至 main.py
## Phase 4: 權限控制
- [x] **4.1** 實作部門隔離邏輯
- super_admin 可查看所有
- manager 可查看同部門
- engineer 僅可查看自己
## Phase 5: 測試
- [x] **5.1** 單元測試:負載計算邏輯
- [x] **5.2** 單元測試:週邊界計算
- [x] **5.3** API 測試heatmap 端點
- [x] **5.4** API 測試user workload 端點
- [x] **5.5** API 測試:權限控制
## Phase 6: E2E 測試與驗證
- [x] **6.1** 自動化 E2E 測試:負載熱圖完整流程
- 建立測試使用者與任務資料
- 驗證負載計算正確性
- 驗證負載等級判定
- [x] **6.2** 自動化 E2E 測試:權限控制流程
- super_admin 可查看所有人
- 一般使用者僅能查看自己
- 跨部門存取拒絕
- [x] **6.3** 自動化 E2E 測試Redis 快取驗證
- 首次請求計算並快取
- 二次請求命中快取
- [x] **6.4** 更新 API 文件OpenAPI 自動生成)
## Dependencies
```
1.1, 1.2 → 可平行執行
1.3 → 依賴 1.1
2.1 → 依賴 1.1, 1.3
2.2 → 依賴 2.1
3.1-3.5 → 依賴 2.1, 2.2
4.1 → 依賴 3.1
5.1-5.5 → 可平行執行,依賴 Phase 3, 4
6.1-6.4 → 依賴 Phase 3, 4, 5
```
## Validation Criteria
每個任務完成後需確認:
- 程式碼無語法錯誤
- 相關測試通過
- 符合現有程式碼風格