Filtrado de Precios con Rango Usando Between en Time Wareham
Clase 28 de 36 • Curso de NestJS: Persistencia de Datos con TypeORM
Resumen
¿Cómo filtrar precios por rango utilizando TypeORM?
Filtrar datos por rangos es una práctica común y esencial en el desarrollo de aplicaciones que manejan grandes volúmenes de datos. En este contexto, aprenderemos a utilizar TypeORM para filtrar precios dentro de un rango específico. Esto se logra con el uso de la cláusula BETWEEN, una herramienta poderosa para obtener los resultados deseados de manera eficiente y precisa.
¿Cómo configurar el DTO para los filtros de precios?
La configuración del DTO (Objeto de Transferencia de Datos) es el primer paso para recibir y validar correctamente los parámetros de entrada. En este caso, configuraremos dos parámetros opcionales: MINPRICE y MAXPRICE. Aquí te explicamos cómo:
- Definición de parámetros: Se agregan
MINPRICEyMAXPRICEcomo parámetros opcionales con la cláusulaisPositive()para asegurar que los valores sean positivos. - Validación condicional: Utilizamos el decorador
VALIDATEIFdeClassValidatorpara asegurar que si se proporcionaMINPRICE,MAXPRICEtambién debe estar presente, garantizando que siempre se tenga un rango completo.
@IsOptional()
@IsPositive()
minPrice: number;
@ValidateIf(o => o.minPrice !== undefined)
@IsPositive()
maxPrice: number;
¿Cómo implementar el filtro con TypeORM?
Al establecer filtros en consultas, es fundamental hacerlo de manera dinámica para permitir flexibilidad en las búsquedas. Aquí te mostramos cómo:
-
Importar y configurar Between: Primero importamos el método
Betweende TypeORM, que nos facilita establecer las condiciones de búsqueda por rango. -
Crear condiciones dinámicas: Se inicia con una condición
WHEREvacía que se llenará dinámicamente dependiendo de los filtros recibidos. Esto no solo te permitirá buscar por precio, sino que mantendrá el código limpio y escalable para futuras extensiones, como filtrar por marca o categoría.
import { Between, FindConditions } from 'typeorm';
// Crear un objeto WHERE inicialmente vacío
let where: FindConditions<Product> = {};
// Si existen MINPRICE y MAXPRICE, agregar la condición WHERE
if (minPrice !== undefined && maxPrice !== undefined) {
where.price = Between(minPrice, maxPrice);
}
// Ejecutar query usando el objeto WHERE
¿Cómo verificar la funcionalidad y debuggear?
Verificar que todo funcione como debería es crucial. Usando una herramienta como Insomnia para simular solicitudes HTTP, podrás asegurar que tu API responde correctamente a los parámetros de entrada.
-
Verificación de parámetros: A través de pruebas de solicitudes, puedes verificar que al ingresar un
MINPRICE, se exige unMAXPRICEantes de proceder. Además, la validación de positividad garantiza que no se permitan valores negativos o cero. -
Console.log para Depuración: Añadir un
console.logpara mostrar los valores deMINPRICEyMAXPRICEte ayudará a monitorizar las solicitudes en tiempo real y asegurar que los parámetros se reciben como se esperaba.
Consejos finales
- Explora la documentación de TypeORM para descubrir más opciones avanzadas de query.
- Mantén siempre tus condiciones tipadas para evitar errores a largo plazo.
- Utiliza
console.logcon moderación y sólo en etapas de depuración para mantener un output limpio en producción.
¡Ahora tienes las herramientas para implementar filtros de precios por rango eficientemente con TypeORM! Sigue explorando y profundizando en herramientas similares para seguir mejorando tus habilidades de desarrollo.