En general los cursos de NestJs son excelentes me están gustando mucho espero creen más con todo el tema de los test.
El profesor lo explica todo muy claro.
Introducción
¿Ya tomaste el Curso de NestJS: Programación Modular?
Instalación de Platzi Store y presentación
Instalación de Docker para este curso
Database
Configuración de Docker para MongoDB
Exploración de la base de datos con Mongo Compass
Instalando y conectado MongoDB Driver
Conexión como inyectable
Ejecutando un query
Usando variables de ambiente en Mongo
Mongoose
¿Qué es Mongoose? Instalación y configuración
Implementando Mongoose en Módulos
Conectando Mongo a los servicios
Create, update y delete
Pipe para mongoid
Agregando paginación
Agregando un filtro de rango para precios
Agregando indexadores
Relaciones en MongoDB
Relaciones uno a uno embebidas
Relaciones uno a uno referenciadas
Relaciones uno a muchos embebidas
Cómo tipar relaciones uno a muchos embebidas
Relaciones uno a muchos referenciadas
Manipulación de arrays en MongoDB
Próximos pasos
Continúa con el Curso de NestJS: Autenticación con Passport y JWT
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
// src/products/dtos/products.dtos.ts
import {
...,
ValidateIf // 👈 new decorator
} from 'class-validator';
export class FilterProductsDto {
...
@IsOptional()
@Min(0)
minPrice: number; // 👈 new field
@ValidateIf((params) => params.minPrice)
@IsPositive()
maxPrice: number; // 👈 new field
}
// src/products/services/products.service.ts
import { Model, FilterQuery } from 'mongoose';
@Injectable()
export class ProductsService {
...
findAll(params?: FilterProductsDto) {
if (params) {
const filters: FilterQuery<Product> = {}; // 👈 create filters
const { limit, offset } = params;
const { minPrice, maxPrice } = params; // 👈
if (minPrice && maxPrice) {
filters.price = { $gte: minPrice, $lte: maxPrice };
}
return this.productModel.find(filters).skip(offset).limit(limit).exec();
}
return this.productModel.find().exec();
}
..
}
Aportes 5
Preguntas 4
En general los cursos de NestJs son excelentes me están gustando mucho espero creen más con todo el tema de los test.
El profesor lo explica todo muy claro.
Excelente clase, todo se entiende, todo funciona de lo más bien 😃
findAll(params?: FilterProductsDto) {
if (params) {
const filters: FilterQuery<Product> = {};
const limit = params.limit || 10;
const offset = params.offset || 0;
const { minPrice, maxPrice } = params;
if (minPrice && maxPrice) {
filters.price = { $gte: minPrice, $lte: maxPrice };
}
return this.productModel
.find(filters)
.skip(offset * limit)
.limit(limit)
.exec();
}
return this.productModel.find().exec();
}
Cuando se didiregen a la ruta de docs para poder probar la documentación con swagger, me di cuenta que los parámetros están en
*required
, cuando estos deberian ser opcionales. En el FilterDto le agregué esto para que no sean obligatorios pasarlos. ¿Será la única solución?
export class FilterProductsDto {
@ApiProperty({ required: false })
@IsOptional()
@IsPositive()
limit: number;
@ApiProperty({ required: false })
@IsOptional()
@Min(0)
offset: number;
}
Se podría validad en ambos datos
@IsOptional()
@ValidateIf((params) => params.maxPrice)
@Min(0)
minPrice: number;
@ValidateIf((params) => params.minPrice)
@IsPositive()
maxPrice: number;
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.