53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
"""
|
|
Migration script to add the is_admin flag expected by the current User model.
|
|
"""
|
|
import logging
|
|
|
|
from sqlalchemy import inspect, text
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def run_migration():
|
|
"""
|
|
Add user.is_admin and backfill it from the existing admin role assignment.
|
|
Returns:
|
|
- True: if changes were made successfully
|
|
- None: if no changes were needed
|
|
- False: if errors occurred
|
|
"""
|
|
from musicround import db
|
|
|
|
try:
|
|
inspector = inspect(db.engine)
|
|
existing_columns = [column["name"] for column in inspector.get_columns("user")]
|
|
|
|
if "is_admin" in existing_columns:
|
|
logger.info("is_admin column already exists")
|
|
return None
|
|
|
|
with db.engine.connect() as conn:
|
|
logger.info("Adding is_admin column")
|
|
conn.execute(text('ALTER TABLE "user" ADD COLUMN is_admin BOOLEAN DEFAULT 0'))
|
|
conn.execute(
|
|
text(
|
|
"""
|
|
UPDATE "user"
|
|
SET is_admin = 1
|
|
WHERE id IN (
|
|
SELECT ur.user_id
|
|
FROM user_roles ur
|
|
JOIN role r ON r.id = ur.role_id
|
|
WHERE lower(r.name) = 'admin'
|
|
)
|
|
"""
|
|
)
|
|
)
|
|
conn.commit()
|
|
|
|
logger.info("Added is_admin column")
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"Migration add_user_is_admin failed: {str(e)}")
|
|
return False
|