#!/usr/bin/env python3 """ Migration script to add admin columns to users table Run this script to update the database schema for admin functionality """ import os import sys from dotenv import load_dotenv # Load environment variables load_dotenv() # Add current directory to Python path sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from flask import Flask from flask_sqlalchemy import SQLAlchemy from models import db, User import uuid from sqlalchemy import text def migrate_database(): """Add is_admin and role columns to users table""" app = Flask(__name__) app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'dev-secret-key-change-in-production') app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('SQLALCHEMY_DATABASE_URI') app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db.init_app(app) with app.app_context(): # Check if columns already exist inspector = db.inspect(db.engine) columns = [column['name'] for column in inspector.get_columns('users')] if 'is_admin' not in columns: print("Adding is_admin column...") db.session.execute(text('ALTER TABLE users ADD COLUMN is_admin BOOLEAN DEFAULT FALSE')) if 'role' not in columns: print("Adding role column...") db.session.execute(text('ALTER TABLE users ADD COLUMN role VARCHAR(50) DEFAULT \'User\'')) db.session.commit() print("Migration completed successfully!") # Update admin user if exists admin_email = os.environ.get('ADMIN_EMAIL') if admin_email: admin_user = User.query.filter_by(email=admin_email).first() if admin_user: admin_user.is_admin = True admin_user.role = 'Admin' db.session.commit() print(f"Updated {admin_email} as admin user") else: print(f"Admin user {admin_email} not found in database") if __name__ == '__main__': migrate_database()