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