""" Middleware RequestID — injecte un identifiant unique de requête (trace_id) dans les logs structlog pour le tracing de bout en bout. Usage : le trace_id est disponible dans structlog.contextvars.bind_contextvars(trace_id=...) et dans la réponse via l'en-tête X-Request-ID. """ import uuid import structlog from starlette.middleware.base import BaseHTTPMiddleware from starlette.requests import Request from starlette.responses import Response class RequestIDMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next) -> Response: trace_id = str(uuid.uuid4()) # Injecter dans structlog pour toute la durée de la requête structlog.contextvars.bind_contextvars(trace_id=trace_id) response = await call_next(request) # Ajouter l'en-tête dans la réponse pour le client response.headers["X-Request-ID"] = trace_id return response