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
MINPRICE
yMAXPRICE
como parámetros opcionales con la cláusulaisPositive()
para asegurar que los valores sean positivos. - Validación condicional: Utilizamos el decorador
VALIDATEIF
deClassValidator
para asegurar que si se proporcionaMINPRICE
,MAXPRICE
tambié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
Between
de TypeORM, que nos facilita establecer las condiciones de búsqueda por rango. -
Crear condiciones dinámicas: Se inicia con una condición
WHERE
vací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 unMAXPRICE
antes 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.log
para mostrar los valores deMINPRICE
yMAXPRICE
te 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.log
con 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.