Spaces:
Runtime error
Runtime error
File size: 1,752 Bytes
6a5b8d8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
"""
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}")
|