61 lines
1.9 KiB
Python

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")