Importante

viernes, 12 de mayo de 2023

nest paginacion

 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