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

92
backend/README.md Normal file
View File

@@ -0,0 +1,92 @@
# PROJECT CONTROL Backend
FastAPI 後端服務
## 系統需求
### 必要服務
| 服務 | 版本 | 說明 |
|-----|------|-----|
| Python | 3.11+ | 執行環境 |
| MySQL | 8.0+ | 主要資料庫 |
| Redis | 6.0+ | Session 存儲 |
### Redis Server 安裝
Redis Python 套件 (`redis==5.0.1`) 僅為客戶端,需另外安裝 Redis Server
**macOS (Homebrew):**
```bash
brew install redis
brew services start redis
```
**Ubuntu/Debian:**
```bash
sudo apt update
sudo apt install redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server
```
**Docker:**
```bash
docker run -d --name redis -p 6379:6379 redis:alpine
```
**驗證安裝:**
```bash
redis-cli ping
# 應回傳 PONG
```
## 環境建置
```bash
# 使用 Conda
conda env create -f environment.yml
conda activate pjctrl
# 或使用 pip
pip install -r requirements.txt
```
## 設定
複製並編輯環境變數:
```bash
cp .env.example .env
```
主要設定項目:
- `MYSQL_*` - 資料庫連線
- `REDIS_*` - Redis 連線
- `JWT_SECRET_KEY` - JWT 簽名密鑰 (生產環境必須更換)
- `AUTH_API_URL` - 外部認證 API
## 執行
```bash
# 開發模式
uvicorn app.main:app --reload --port 8000
# 生產模式
uvicorn app.main:app --host 0.0.0.0 --port 8000
```
## 資料庫遷移
```bash
# 升級至最新版本
alembic upgrade head
# 回滾一個版本
alembic downgrade -1
```
## 測試
```bash
pytest -v
```