Filtrado de Precios con Rango Usando Between en Time Wareham

Clase 28 de 36Curso 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 y MAXPRICE como parámetros opcionales con la cláusula isPositive() para asegurar que los valores sean positivos.
  • Validación condicional: Utilizamos el decorador VALIDATEIF de ClassValidator para asegurar que si se proporciona MINPRICE, 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 un MAXPRICE 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 de MINPRICE y MAXPRICE 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.