""" Database initialization and migration """ from sqlalchemy import event from .database import Base, engine, SessionLocal from .models.user import User, UserRole, UserStatus import logging logger = logging.getLogger(__name__) def init_db(): """Initialize database and create default admin user""" try: # Create all tables Base.metadata.create_all(bind=engine) # Create a session db = SessionLocal() # Check if admin user exists admin = db.query(User).filter(User.role == UserRole.ADMIN).first() if not admin: # Create default admin user with password 'admin' # Note: This should be changed immediately after first login admin = User( username="admin", password_hash=User.hash_password("admin"), role=UserRole.ADMIN, status=UserStatus.ACTIVE ) db.add(admin) db.commit() logger.info("Created default admin user") db.close() logger.info("Database initialized successfully") return True except Exception as e: logger.error(f"Error initializing database: {e}") return False @event.listens_for(User, 'after_insert') def user_created(mapper, connection, target): """Log user creation""" logger.info(f"New user created: {target.username}") @event.listens_for(User.status, 'set') def user_status_changed(target, value, oldvalue, initiator): """Log user status changes""" if oldvalue and value != oldvalue: logger.info(f"User {target.username} status changed from {oldvalue} to {value}")