from typing import Callable, Any from fastapi import Request, Response from slowapi import Limiter, _rate_limit_exceeded_handler from slowapi.errors import RateLimitExceeded from slowapi.middleware import SlowAPIMiddleware from slowapi.util import get_remote_address from app.config import settings from app.logging import get_logger logger = get_logger(__name__) # Rate limiter limiter = Limiter(key_func=get_remote_address) async def logging_middleware(request: Request, call_next: Callable[[Request], Any]) -> Any: """Log all requests and responses.""" logger.debug( "Request received", method=request.method, url=str(request.url), client_ip=get_remote_address(request) ) response = await call_next(request) logger.debug( "Response sent", status_code=response.status_code, method=request.method, url=str(request.url) ) return response