Spaces:
Runtime error
Runtime error
| """ | |
| 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 | |
| def user_created(mapper, connection, target): | |
| """Log user creation""" | |
| logger.info(f"New user created: {target.username}") | |
| 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}") | |