api-admim/app/scripts/create_initial_user.py

38 lines
1.6 KiB
Python

import contextlib
from fastapi_users.exceptions import UserAlreadyExists
from sqlalchemy import select
from app.database.session import get_db
from app.rbac.auth import get_user_db, get_user_manager
from app.rbac.schemas import UserCreate
from app.database.models import RbacUser
get_async_session_context = contextlib.asynccontextmanager(get_db)
get_user_db_context = contextlib.asynccontextmanager(get_user_db)
get_user_manager_context = contextlib.asynccontextmanager(get_user_manager)
async def create_user(email: str, password: str, full_name: str, username: str, is_superuser: bool = False):
try:
async with get_async_session_context() as session:
async with get_user_db_context(session) as user_db:
async with get_user_manager_context(user_db) as user_manager:
user = await user_manager.create(
UserCreate(
email=email,
password=password,
username=username,
full_name=full_name,
is_superuser=is_superuser,
is_active=True
)
)
print(f"User created: {user}")
return user.id
except UserAlreadyExists:
print(f"User {email} already exists")
async with session.begin():
result_user = await session.execute(select(RbacUser).filter_by(email=email))
existing_user = result_user.scalars().first()
return existing_user.id