JRNET / core /database_init.py
Factor Studios
Upload 96 files
6a5b8d8 verified
raw
history blame
1.75 kB
"""
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}")