en la carpeta dto dentro de twits
debo crear una nueva pagina llamada paginacion-query.dto.ts
/* eslint-disable prettier/prettier */
import { IsNumber, IsOptional, IsPositive } from 'class-validator';
export class PaginationQueryDto {
@IsNumber()
@IsPositive()
@IsOptional()
limit?: number;
@IsNumber()
@IsPositive()
@IsOptional()
offset?: number;
}
voy a servicio twit
async getTwits(pagination: PaginationQueryDto): Promise<Twits[]> {
const { limit, offset } = pagination;
return await this.twitsRepository.find({
relations: ['user'],
skip: offset,
take: limit,
});
}
incorporo como parametro la painationquerydto y lo desestructuro en limit y offset.
luego agrego esto ami busqueda en find() donde ship; representa los campos a saltar y take la cantidad a buscar
ahora debo cambiar el contrlador
@Get()
async getTwitsFilter(
@Query() pagination: PaginationQueryDto,
): Promise<Twits[]> {
return await this.twitService.getTwits(pagination);
}
ahora como nuestro dto require los parametros en numero y llegarn en string debo castiarlo a si que en main debo agregar una funcionalidad que lo castee de string a number, para ello usaremos transformOptions: {
enableImplicitConversion: true,
app.useGlobalPipes(
new ValidationPipe({
//lo que se envia sera de un objeto de la dto
transform: true,
// whitelist filtra la data maliciosa dejando sólo la que corresponda al dto
whitelist: true,
// cualquier propiedad adicionalo a la que necesita nuestro medto crea un
//error 404
forbidNonWhitelisted: true,
//castean de string a number
transformOptions: {
//con esto nos aseguramos que los tipos de type
//que entran siempre rseran correctos
enableImplicitConversion: true,
},
}),
);
0 comentarios:
Publicar un comentario