42 lines
1.8 KiB
Python
42 lines
1.8 KiB
Python
import contextlib
|
|
from app.rbac.auth import get_user_db, get_user_manager
|
|
from app.rbac.schemas import UserCreate
|
|
from app.database.session import get_db
|
|
from sqlalchemy import select
|
|
from fastapi_users.exceptions import UserAlreadyExists
|
|
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):
|
|
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:
|
|
try:
|
|
user = await user_manager.create(
|
|
UserCreate(
|
|
email=email,
|
|
password=password,
|
|
username=username,
|
|
full_name=full_name,
|
|
is_superuser=is_superuser,
|
|
is_active=True
|
|
)
|
|
)
|
|
|
|
return user.id
|
|
except UserAlreadyExists:
|
|
print(f"Usuário {email} já existe")
|
|
result_user = await session.execute(select(RbacUser).filter_by(email=email))
|
|
existing_user = result_user.scalars().first()
|
|
return existing_user.id
|
|
|
|
|
|
async def create_initial_users():
|
|
user_id = await create_user(email="admin@sonora.com", password="admin", is_superuser=True,
|
|
username="Admin", full_name="Admin")
|
|
return user_id
|