from sqlalchemy.ext.asyncio import AsyncSession from app.database.session import sessionmanager from app.rbac.auth import current_active_user from fastapi_users import models from fastapi import Depends, HTTPException, status from typing import AsyncIterator async def get_tenant_schema( user: models.UP = Depends(current_active_user), # Valida o token e obtém o usuário ) -> models.UP: """ Configura o schema do tenant no banco de dados e retorna apenas o usuário autenticado. """ if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Usuário não autenticado.", ) # Obtém o UUID do inquilino (assumindo que está no atributo fk_inquilino_uuid) tenant_uuid = user.fk_inquilino_uuid if not tenant_uuid: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Inquilino não associado ao usuário.", ) # Configura o schema do tenant usando `session_with_tenant` async with sessionmanager.session_with_tenant(tenant_uuid) as session: yield session # Retorna o usuário autenticado para o verify_permissions # return user async def get_tenant_session( tenant_schema: str = Depends(get_tenant_schema) ) -> AsyncIterator[AsyncSession]: """ Obtém uma sessão configurada para o schema do tenant. """ async with sessionmanager.session_with_tenant(tenant_schema) as session: yield session