## 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>
2.5 KiB
2.5 KiB
Change: Migrate SQLite to MySQL with Table Prefix
Why
目前專案使用 SQLite 作為開發資料庫,需要遷移到雲端 MySQL 資料庫以支援生產環境部署。由於 MySQL 資料庫 db_A060 會與其他專案共用,需要為所有資料表加上 tr_ 前綴以避免命名衝突。
遷移目標:
- 完全移除 SQLite 支援,統一使用 MySQL
- 所有資料表加上
tr_前綴(例如users→tr_users) - 使用 Alembic 進行資料庫版本控制和遷移管理
- 確保遷移腳本只影響
tr_前綴的資料表
What Changes
1. Database Configuration
- 更新
DATABASE_URL環境變數格式支援 MySQL - 移除
app/core/database.py中的 SQLite 特殊處理 - 新增 MySQL 驅動相依套件 (
pymysql或mysqlclient)
2. Model Table Prefix (BREAKING)
所有 10 個資料表將重新命名:
| 原名稱 | 新名稱 |
|---|---|
users |
tr_users |
user_sessions |
tr_user_sessions |
incident_rooms |
tr_incident_rooms |
room_members |
tr_room_members |
room_templates |
tr_room_templates |
messages |
tr_messages |
message_reactions |
tr_message_reactions |
message_edit_history |
tr_message_edit_history |
generated_reports |
tr_generated_reports |
room_files |
tr_room_files |
3. Alembic Integration
- 初始化 Alembic 遷移框架
- 建立初始遷移腳本(建立所有
tr_前綴資料表) - 移除
app/main.py中的Base.metadata.create_all()自動建表
4. Index and Constraint Naming
- 更新所有索引名稱加上
tr_前綴以避免衝突 - 更新唯一約束名稱
5. MySQL Compatibility
- 確保 JSON 欄位在 MySQL 中正確運作
- 確保 Enum 類型在 MySQL 中正確運作
- 處理 MySQL 的字串長度限制(VARCHAR vs TEXT)
Impact
- Affected specs: 新增
databasespec - Affected code:
app/core/database.py- 移除 SQLite 支援app/core/config.py- 可能新增資料表前綴設定app/modules/*/models.py- 所有 5 個 models.py 檔案更新__tablename__app/main.py- 移除自動建表,改用 Alembicrequirements.txt- 新增alembic,pymysql.env,.env.example- 更新 DATABASE_URL 格式
- Breaking changes:
- 所有資料表重新命名(需要重新建立資料庫或執行遷移)
- SQLite 不再支援
- 現有 SQLite 資料不會自動遷移(需手動處理)
- New files:
alembic.ini- Alembic 設定檔alembic/- 遷移腳本目錄