MirrorAPI/middlewares/error_handler.py
2025-11-03 15:18:26 -03:00

58 lines
1.7 KiB
Python

# middlewares/error_handler.py
from fastapi import Request
from fastapi.responses import JSONResponse
from sqlalchemy.exc import OperationalError, IntegrityError
import pymysql
async def database_error_handler(request: Request, call_next):
"""
Middleware para capturar erros de banco de dados e retornar respostas JSON amigáveis.
"""
try:
response = await call_next(request)
return response
except OperationalError as e:
# Erros de conexão (ex: Access denied, banco inexistente)
return JSONResponse(
status_code=500,
content={
"success": False,
"error": "Database connection failed",
"details": str(e.orig) if hasattr(e, "orig") else str(e),
},
)
except IntegrityError as e:
# Erros de integridade (ex: unique constraint, foreign key)
return JSONResponse(
status_code=400,
content={
"success": False,
"error": "Database integrity error",
"details": str(e.orig) if hasattr(e, "orig") else str(e),
},
)
except pymysql.err.OperationalError as e:
# Erro específico do PyMySQL (ex: senha errada)
return JSONResponse(
status_code=500,
content={
"success": False,
"error": "MySQL Operational Error",
"details": str(e),
},
)
except Exception as e:
# Qualquer outro erro genérico
return JSONResponse(
status_code=500,
content={
"success": False,
"error": "Internal Server Error",
"details": str(e),
},
)