import logging import sys from pathlib import Path # Add the project root to the Python path sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent)) from sqlalchemy import create_engine from app.core.config import settings from app.core.database import SessionLocal from app.core.security import get_password_hash from app.models.user import User, UserRole logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def init_db(): """Initialize the database with required tables and initial admin user.""" try: # Create database directory if it doesn't exist settings.DB_DIR.mkdir(parents=True, exist_ok=True) # Create database engine engine = create_engine(settings.SQLALCHEMY_DATABASE_URL) # Create an admin user db = SessionLocal() # Check if admin user already exists existing_admin = db.query(User).filter(User.email == settings.FIRST_SUPERUSER_EMAIL).first() if not existing_admin: logger.info("Creating initial admin user...") admin_user = User( email=settings.FIRST_SUPERUSER_EMAIL, hashed_password=get_password_hash(settings.FIRST_SUPERUSER_PASSWORD), is_active=True, role=UserRole.ADMIN, first_name="Admin", last_name="User", email_verified=True ) db.add(admin_user) db.commit() logger.info(f"Admin user created with email: {settings.FIRST_SUPERUSER_EMAIL}") else: logger.info("Admin user already exists") db.close() logger.info("Database initialization completed successfully") except Exception as e: logger.error(f"Error initializing database: {e}") raise if __name__ == "__main__": logger.info("Creating initial database tables and admin user") init_db() logger.info("Initial data created")