Paginación de Productos con Limit y Offset en Controladores API
Clase 27 de 36 • Curso de NestJS: Persistencia de Datos con TypeORM
Resumen
¿Cómo realizar la paginación de productos usando un DTO?
La paginación es fundamental para optimizar la visualización de datos en cualquier aplicación. Aquí te mostramos cómo aplicarla en un controlador de productos utilizando un Data Transfer Object (DTO) y pasar los parámetros necesarios para paginar la información de manera efectiva.
Creación de un DTO para parámetros de consulta
En lugar de manejar cada parámetro de consulta por separado, crearemos un DTO especial. Este paso nos permitirá mejorar la flexibilidad y el manejo de query parameters como "limit" y "offset". Sigamos estos pasos:
- Crear un nuevo DTO para el filtrado de productos en la carpeta correspondiente.
- Definir atributos necesarios dentro de este DTO, como
limit
yoffset
. - Validar cada atributo, asegurando que sean opcionales y números positivos. Por ejemplo:
import { IsOptional, IsPositive, Min } from 'class-validator';
export class ProductQueryDto {
@IsOptional()
@IsPositive()
limit: number;
@IsOptional()
@Min(0)
offset: number;
}
- Utilizar estos decoradores asegura que los valores sean válidos antes de ser utilizados en la lógica del negocio.
Implementación de la paginación en el controlador
Una vez que el DTO está configurado, se puede proceder a implementar la paginación en el controlador de productos:
- Modificar el método que manipula el endpoint para recibir el DTO.
- Pasar los parámetros del DTO al método que realiza la consulta de todos los elementos, garantizando que la lógica de paginación se aplique correctamente:
import { ProductQueryDto } from './dtos/product-query.dto';
async findProducts(params: ProductQueryDto): Promise<Product[]> {
const { limit, offset } = params;
// Enviar limit como 'take' y offset como 'skip'
return this.productRepository.find({
take: limit,
skip: offset,
});
}
Transformación automática de parámetros de consulta
Es posible que los parámetros de consulta lleguen como cadenas de texto. Para convertirlos automáticamente a números, podemos ajustar el archivo main.ts
y habilitar la transformación implícita para los query params:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe({
transform: true, // Habilita transformación automática
}));
await app.listen(3000);
}
bootstrap();
Verificación de la paginación en Insomnia
Con la configuración anterior, puedes verificar cómo funciona la paginación mediante Insomnia o cualquier herramienta de API. Simplemente:
- Establece
limit
yoffset
como parámetros en el request. - Observa cómo los productos se devuelven de manera paginada.
- Ajusta estos valores para navegar a través de las diferentes páginas de productos disponibles.
Recuerda que el uso de limit
y offset
permite una paginación flexible que se adapta a las necesidades del frontend o aplicación que estés desarrollando.
Esta técnica es aplicable a cualquier endpoint que requiera paginación. Te animamos a implementar esta estrategia en otros controladores como clientes u órdenes, lo que mejorará la efectividad y eficiencia de la aplicación. ¡Continúa aprendiendo e integrando nuevas técnicas en tus proyectos!