Filtros e Interceptores
AllExceptionsFilter — src/app/core/filters/all-exceptions.filter.ts
Filtro global registrado en main.ts. Captura todos los errores de la aplicación y los convierte al formato estándar.
Tipos de excepción manejados
| Tipo | Respuesta |
|---|---|
AppException | Usa el statusCode y mensaje de la excepción de negocio |
HttpException (NestJS) | Usa el statusCode HTTP y el mensaje del framework |
Cualquier otro Error | 500 Internal Server Error con mensaje genérico |
Formato de respuesta de error
{
"statusCode": 400,
"status": "error",
"message": "Descripción del error",
"data": null
}
AppException — src/app/core/exceptions/app.exception.ts
Excepción personalizada para errores de negocio. Extiende HttpException.
throw new AppException('Contact is blocked', HttpStatus.FORBIDDEN);
Permite lanzar errores con mensajes específicos del dominio que el AllExceptionsFilter reporta directamente al cliente.
ResponseInterceptor — src/app/core/interceptors/response.interceptor.ts
Interceptor global registrado en main.ts. Normaliza todas las respuestas exitosas.
Comportamiento
- GET requests: envuelve el resultado en
{ results, meta } - POST / PATCH / DELETE: envuelve el resultado en
{ data } - Loggea cada request: método, URL, statusCode, duración en ms (canal
HTTP)
Formato final
// GET
{
"statusCode": 200,
"status": "success",
"message": "OK",
"data": {
"results": [ ... ],
"meta": { "total": 50, "page": 1, "limit": 10 }
}
}
// POST / PATCH / DELETE
{
"statusCode": 201,
"status": "success",
"message": "Created",
"data": { ... }
}