39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from typing import Optional
|
|
import logging
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app import crud, schemas
|
|
from app.core.config import settings
|
|
from app.db.session import Base, engine
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Create tables if they don't exist
|
|
def init_db(db: Session) -> None:
|
|
# Create tables
|
|
Base.metadata.create_all(bind=engine)
|
|
|
|
# Create initial superuser if needed
|
|
create_first_superuser(db)
|
|
|
|
def create_first_superuser(db: Session) -> Optional[schemas.User]:
|
|
"""
|
|
Create a superuser if no users exist in the database.
|
|
|
|
This should be used for initial setup only.
|
|
"""
|
|
user = crud.user.get_by_email(db, email=settings.FIRST_SUPERUSER_EMAIL)
|
|
if user:
|
|
logger.info("Superuser already exists, skipping creation.")
|
|
return None
|
|
|
|
user_in = schemas.UserCreate(
|
|
email=settings.FIRST_SUPERUSER_EMAIL,
|
|
username=settings.FIRST_SUPERUSER_USERNAME,
|
|
password=settings.FIRST_SUPERUSER_PASSWORD,
|
|
is_superuser=True,
|
|
)
|
|
user = crud.user.create(db, obj_in=user_in)
|
|
logger.info(f"Superuser {user.email} created successfully.")
|
|
return user |