Sage100-vps/core/sage_context.py

77 lines
2.2 KiB
Python

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_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()