from dataclasses import dataclass from typing import Optional from fastapi import Depends from sqlalchemy.ext.asyncio import AsyncSession from database import get_session, User from core.dependencies import get_current_user from sage.sage_client import SageGatewayClient from config.config import settings import logging logger = logging.getLogger(__name__) @dataclass class GatewayContext: url: str token: str gateway_id: Optional[str] = None gateway_name: Optional[str] = None user_id: Optional[str] = None is_fallback: bool = False async def get_sage_client_for_user( session: AsyncSession = Depends(get_session), user: User = Depends(get_current_user), ) -> SageGatewayClient: from services.sage_gateway import SageGatewayService service = SageGatewayService(session) active_gateway = await service.get_active_gateway(user.id) if active_gateway: logger.debug(f"Gateway active: {active_gateway.name} pour {user.email}") return SageGatewayClient( gateway_url=active_gateway.gateway_url, gateway_token=active_gateway.gateway_token, gateway_id=active_gateway.id, ) logger.debug(f"Fallback .env pour {user.email}") return SageGatewayClient() async def get_gateway_context_for_user( session: AsyncSession = Depends(get_session), user: User = Depends(get_current_user), ) -> GatewayContext: from services.sage_gateway import SageGatewayService service = SageGatewayService(session) active_gateway = await service.get_active_gateway(user.id) if active_gateway: return GatewayContext( url=active_gateway.gateway_url, token=active_gateway.gateway_token, gateway_id=active_gateway.id, gateway_name=active_gateway.name, user_id=user.id, is_fallback=False, ) return GatewayContext( url=settings.sage_gateway_url, token=settings.sage_gateway_token, gateway_id=None, gateway_name="Fallback (.env)", user_id=user.id, is_fallback=True, ) async def get_sage_client_public() -> SageGatewayClient: return SageGatewayClient()