# middleware/error_handler.py """Summary description .... This module provides classes and functions for: - .... - .... - .... """ import logging from fastapi import HTTPException, Request from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse logger = logging.getLogger(__name__) async def custom_http_exception_handler(request: Request, exc: HTTPException): """Handle HTTP exception.""" logger.error( f"HTTP {exc.status_code}: {exc.detail} - {request.method} {request.url}" ) return JSONResponse( status_code=exc.status_code, content={ "error": { "code": exc.status_code, "message": exc.detail, "type": "http_exception", } }, ) async def validation_exception_handler(request: Request, exc: RequestValidationError): """Handle Pydantic validation errors.""" logger.error(f"Validation error: {exc.errors()} - {request.method} {request.url}") return JSONResponse( status_code=422, content={ "error": { "code": 422, "message": "Validation error", "type": "validation_error", "details": exc.errors(), } }, ) async def general_exception_handler(request: Request, exc: Exception): """Handle unexpected exceptions.""" logger.error( f"Unexpected error: {str(exc)} - {request.method} {request.url}", exc_info=True ) return JSONResponse( status_code=500, content={ "error": { "code": 500, "message": "Internal server error", "type": "server_error", } }, )