feat: implement task management module

Backend (FastAPI):
- Database migration for spaces, projects, task_statuses, tasks tables
- SQLAlchemy models with relationships
- Pydantic schemas for CRUD operations
- Spaces API: CRUD with soft delete
- Projects API: CRUD with auto-created default statuses
- Tasks API: CRUD, status change, assign, subtask support
- Permission middleware with Security Level filtering
- Subtask depth limit (max 2 levels)

Frontend (React + Vite):
- Layout component with navigation
- Spaces list page
- Projects list page
- Tasks list page with status management

Fixes:
- auth_client.py: use 'username' field for external API
- config.py: extend JWT expiry to 7 days
- auth/router.py: sync Redis session with JWT expiry

Tests: 36 passed (unit + integration)
E2E: All APIs verified with real authentication

OpenSpec: add-task-management archived

🤖 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 00:31:34 +08:00
parent 1fda7da2c2
commit daca7798e3
41 changed files with 3616 additions and 13 deletions

View File

@@ -0,0 +1,80 @@
# Task Management
## Purpose
任務管理核心系統,支援多層級架構 (Space > Project > Task > Sub-task)、狀態管理與任務指派功能。
## ADDED Requirements
### Requirement: Hierarchical Task Structure
系統 SHALL 支援多層級任務架構:空間 (Space) > 專案 (Project) > 任務 (Task) > 子任務 (Sub-task)。
#### Scenario: 建立空間
- **GIVEN** 使用者擁有建立空間的權限
- **WHEN** 使用者建立新空間
- **THEN** 系統建立空間並設定擁有者
- **AND** 空間可包含多個專案
#### Scenario: 建立專案
- **GIVEN** 使用者在某空間內擁有建立專案的權限
- **WHEN** 使用者建立新專案
- **THEN** 系統建立專案並關聯至該空間
- **AND** 設定專案的 Owner、Budget、Timeline、Security_Level
- **AND** 自動建立預設任務狀態 (To Do, In Progress, Blocked, Done)
#### Scenario: 建立任務與子任務
- **GIVEN** 使用者在專案內擁有建立任務的權限
- **WHEN** 使用者建立任務或子任務
- **THEN** 系統建立任務並維護父子關係
- **AND** 子任務深度限制為 2 層
### Requirement: Project Security Level
系統 SHALL 根據專案的安全等級 (Security Level) 控制存取權限。
#### Scenario: Public 專案存取
- **GIVEN** 專案設定為 security_level = 'public'
- **WHEN** 任何已登入使用者嘗試存取
- **THEN** 系統允許存取
#### Scenario: Department 專案存取
- **GIVEN** 專案設定為 security_level = 'department'
- **WHEN** 使用者嘗試存取
- **THEN** 系統僅允許同部門使用者或專案成員存取
#### Scenario: Confidential 專案存取
- **GIVEN** 專案設定為 security_level = 'confidential'
- **WHEN** 使用者嘗試存取
- **THEN** 系統僅允許專案成員存取
- **AND** 系統管理員不受此限制
### Requirement: Task Status Management
系統 SHALL 管理任務狀態,支援專案層級的狀態定義。
#### Scenario: 預設狀態建立
- **GIVEN** 使用者建立新專案
- **WHEN** 專案建立完成
- **THEN** 系統自動建立預設狀態: To Do, In Progress, Blocked, Done
#### Scenario: 狀態變更
- **GIVEN** 使用者擁有更新任務的權限
- **WHEN** 使用者變更任務狀態
- **THEN** 系統更新狀態並記錄變更時間
#### Scenario: 阻礙標記
- **GIVEN** 任務遇到阻礙無法進行
- **WHEN** 使用者將任務狀態變更為 "Blocked"
- **THEN** 系統設定 blocker_flag = true
### Requirement: Task Assignment
系統 SHALL 支援任務指派與時間估算。
#### Scenario: 指派任務
- **GIVEN** 使用者擁有指派任務的權限
- **WHEN** 使用者將任務指派給某人
- **THEN** 系統更新 assignee_id
- **AND** 任務計入被指派者的工作負載
#### Scenario: 時間估算與追蹤
- **GIVEN** 任務已被指派
- **WHEN** 使用者設定 original_estimate 與回報 time_spent
- **THEN** 系統記錄並可計算剩餘時間