61 lines
1.9 KiB
Python
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")
|