feat: Add Migration_007 to ensure 'done' status in existing ENUM columns

- Add Migration_007_AddDoneToStatusEnum class
- Safely adds 'done' to existing status ENUM if not present
- Handles databases created before 'done' status was added
- Includes proper rollback support
- Update README and CHANGELOG with migration details
parent 61453eb5
...@@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ...@@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Database migration Migration_006 for schema updates - Database migration Migration_006 for schema updates
- Web interface integration showing status information - Web interface integration showing status information
- API endpoints include status in responses - API endpoints include status in responses
- **New Migration_007**: Ensures 'done' status is available in existing ENUM columns
- Safely adds 'done' to existing status ENUM if not present
- Handles databases created before the 'done' status was added
- Includes proper rollback support for migration reversal
### Enhanced ### Enhanced
- **Active Status Logic**: Updated to require match status='pending' in addition to ZIP upload completion - **Active Status Logic**: Updated to require match status='pending' in addition to ZIP upload completion
...@@ -29,7 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ...@@ -29,7 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Technical Details ### Technical Details
- **Database Schema**: Added status column (enum, indexed, default 'pending') - **Database Schema**: Added status column (enum, indexed, default 'pending')
- **Model Updates**: Enhanced Match model with status field and updated set_active() logic - **Model Updates**: Enhanced Match model with status field and updated set_active() logic
- **Migration System**: New Migration_006 with proper rollback support - **Migration System**: New Migration_006 and Migration_007 with proper rollback support
- **Web Interface**: Updated templates to display status information - **Web Interface**: Updated templates to display status information
- **API Integration**: Status field included in all match-related API responses - **API Integration**: Status field included in all match-related API responses
......
...@@ -733,6 +733,10 @@ curl -H "Authorization: Bearer $API_TOKEN" \ ...@@ -733,6 +733,10 @@ curl -H "Authorization: Bearer $API_TOKEN" \
- Web interface integration with status display in match detail pages - Web interface integration with status display in match detail pages
- API endpoints include status information in responses - API endpoints include status information in responses
- Backward compatibility maintained for existing matches - Backward compatibility maintained for existing matches
- **New Migration_007**: Ensures 'done' status is available in existing ENUM columns
- Safely adds 'done' to existing status ENUM if not present
- Handles databases created before the 'done' status was added
- Includes proper rollback support for migration reversal
-**Configuration Auto-Migration**: Enhanced persistent directory configuration system -**Configuration Auto-Migration**: Enhanced persistent directory configuration system
- Automatic copying of .env to persistent config directory when mbetterd.conf doesn't exist - Automatic copying of .env to persistent config directory when mbetterd.conf doesn't exist
......
...@@ -376,6 +376,87 @@ class Migration_006_AddStatusColumn(Migration): ...@@ -376,6 +376,87 @@ class Migration_006_AddStatusColumn(Migration):
def can_rollback(self) -> bool: def can_rollback(self) -> bool:
return True return True
class Migration_007_AddDoneToStatusEnum(Migration):
"""Add 'done' value to existing status ENUM column"""
def __init__(self):
super().__init__("007", "Add 'done' value to existing status ENUM column if not present")
def up(self):
"""Add 'done' to status ENUM if not already present"""
try:
# Check if status column exists
inspector = inspect(db.engine)
columns = inspector.get_columns('matches')
status_column = None
for col in columns:
if col['name'] == 'status':
status_column = col
break
if not status_column:
logger.info("status column does not exist, skipping ENUM modification")
return True
# Check current ENUM values by trying to insert 'done' and seeing if it fails
try:
with db.engine.connect() as conn:
# Try a test query to see if 'done' is already valid
result = conn.execute(text("SELECT 1 FROM matches WHERE status = 'done' LIMIT 1"))
logger.info("'done' value already exists in status ENUM, skipping modification")
return True
except Exception:
# 'done' is not a valid ENUM value, so we need to add it
pass
# Add 'done' to the ENUM
alter_enum_sql = '''
ALTER TABLE matches
MODIFY COLUMN status ENUM('pending', 'scheduled', 'bet', 'ingame', 'cancelled', 'failed', 'paused', 'done') DEFAULT 'pending'
'''
with db.engine.connect() as conn:
conn.execute(text(alter_enum_sql))
conn.commit()
logger.info("Added 'done' value to status ENUM successfully")
return True
except Exception as e:
logger.error(f"Migration 007 failed: {str(e)}")
raise
def down(self):
"""Remove 'done' from status ENUM (not recommended as it may cause data loss)"""
try:
# Check if any records use 'done' status
with db.engine.connect() as conn:
result = conn.execute(text("SELECT COUNT(*) as count FROM matches WHERE status = 'done'"))
row = result.fetchone()
if row and row.count > 0:
logger.warning(f"Cannot rollback migration 007: {row.count} records use 'done' status")
return False
# Remove 'done' from ENUM
alter_enum_sql = '''
ALTER TABLE matches
MODIFY COLUMN status ENUM('pending', 'scheduled', 'bet', 'ingame', 'cancelled', 'failed', 'paused') DEFAULT 'pending'
'''
with db.engine.connect() as conn:
conn.execute(text(alter_enum_sql))
conn.commit()
logger.info("Removed 'done' value from status ENUM")
return True
except Exception as e:
logger.error(f"Rollback of migration 007 failed: {str(e)}")
raise
def can_rollback(self) -> bool:
return True
class MigrationManager: class MigrationManager:
"""Manages database migrations and versioning""" """Manages database migrations and versioning"""
...@@ -387,6 +468,7 @@ class MigrationManager: ...@@ -387,6 +468,7 @@ class MigrationManager:
Migration_004_CreateSystemSettingsTable(), Migration_004_CreateSystemSettingsTable(),
Migration_005_AddFixtureActiveTime(), Migration_005_AddFixtureActiveTime(),
Migration_006_AddStatusColumn(), Migration_006_AddStatusColumn(),
Migration_007_AddDoneToStatusEnum(),
] ]
def ensure_version_table(self): def ensure_version_table(self):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment