## Database Migration (SQLite → MySQL) - Add Alembic migration framework - Add 'tr_' prefix to all tables to avoid conflicts in shared database - Remove SQLite support, use MySQL exclusively - Add pymysql driver dependency - Change ad_token column to Text type for long JWT tokens ## Unified Environment Configuration - Centralize all hardcoded settings to environment variables - Backend: Extend Settings class in app/core/config.py - Frontend: Use Vite environment variables (import.meta.env) - Docker: Move credentials to environment variables - Update .env.example files with comprehensive documentation ## Test Organization - Move root-level test files to tests/ directory: - test_chat_room.py → tests/test_chat_room.py - test_websocket.py → tests/test_websocket.py - test_realtime_implementation.py → tests/test_realtime_implementation.py - Fix path references in test_realtime_implementation.py Breaking Changes: - CORS now requires explicit origins (no more wildcard) - All database tables renamed with 'tr_' prefix - SQLite no longer supported 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
3.3 KiB
3.3 KiB
ADDED Requirements
Requirement: MySQL Database Support
系統 SHALL 使用 MySQL 作為唯一的資料庫後端,不再支援 SQLite。
MySQL 連線配置:
| 環境變數 | 格式 | 說明 |
|---|---|---|
DATABASE_URL |
mysql+pymysql://user:pass@host:port/database |
MySQL 連線字串 |
Scenario: MySQL 連線成功
- WHEN 提供有效的 MySQL 連線字串
- THEN 系統 SHALL 成功連線到 MySQL 資料庫
Scenario: MySQL 連線失敗
- WHEN MySQL 伺服器無法連線
- THEN 系統 SHALL 顯示明確的連線錯誤訊息並拒絕啟動
Requirement: Table Prefix Convention
所有資料表 SHALL 使用 tr_ 前綴以避免與同資料庫中的其他專案發生命名衝突。
資料表命名規則:
- 所有資料表名稱以
tr_開頭 - 所有索引名稱以
ix_tr_開頭 - 所有唯一約束名稱以
uq_tr_開頭
完整資料表清單:
| 模組 | 資料表名稱 |
|---|---|
| Auth | tr_users, tr_user_sessions |
| Chat Room | tr_incident_rooms, tr_room_members, tr_room_templates |
| Realtime | tr_messages, tr_message_reactions, tr_message_edit_history |
| Report | tr_generated_reports |
| File Storage | tr_room_files |
Scenario: 資料表前綴驗證
- WHEN 查詢資料庫中由本系統建立的資料表
- THEN 所有資料表名稱 SHALL 以
tr_開頭
Scenario: 索引前綴驗證
- WHEN 查詢資料庫中由本系統建立的索引
- THEN 所有索引名稱 SHALL 以
ix_tr_開頭
Requirement: Alembic Database Migration
系統 SHALL 使用 Alembic 進行資料庫結構版本控制和遷移管理。
Alembic 配置要求:
- 從環境變數
DATABASE_URL讀取資料庫連線 - 遷移腳本存放於
alembic/versions/目錄 - 支援
alembic upgrade head和alembic downgrade指令
Scenario: 執行資料庫遷移
- WHEN 執行
alembic upgrade head - THEN 系統 SHALL 建立所有
tr_前綴的資料表
Scenario: 自動產生遷移腳本
- WHEN 執行
alembic revision --autogenerate - THEN Alembic SHALL 比對 models 與資料庫結構並產生遷移腳本
Scenario: 遷移腳本隔離
- WHEN 執行任何 Alembic 遷移操作
- THEN 只有
tr_前綴的資料表會受到影響,其他專案的資料表不受影響
Requirement: MySQL Connection Pooling
系統 SHALL 使用連線池管理 MySQL 連線以提升效能和穩定性。
連線池配置:
| 參數 | 預設值 | 說明 |
|---|---|---|
pool_size |
5 | 連線池大小 |
max_overflow |
10 | 最大額外連線數 |
pool_recycle |
3600 | 連線回收時間(秒) |
Scenario: 連線池運作
- WHEN 多個 API 請求同時存取資料庫
- THEN 系統 SHALL 從連線池取得連線而非每次建立新連線
Scenario: 連線回收
- WHEN 連線閒置超過
pool_recycle時間 - THEN 系統 SHALL 自動回收並建立新連線以避免 MySQL 的 wait_timeout 問題
REMOVED Requirements
Requirement: SQLite Support
Reason: 專案已完全遷移至 MySQL,不再需要 SQLite 支援 Migration:
- 移除
app/core/database.py中的 SQLite 特殊處理(check_same_thread) - 更新
.env.example移除 SQLite 連線範例 - 現有 SQLite 資料需手動遷移或重新建立