## 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 資料需手動遷移或重新建立