#NestJs Swagger Query not sending correct value for boolean properties

2 messages · Page 1 of 1 (latest)

viral fossil
#

I have a simple filter dto:

export class FilterPlugsDto {
  @IsBoolean()
  @IsOptional()
  @ApiPropertyOptional()
  isNew: boolean;

  @IsBoolean()
  @IsOptional()
  @ApiPropertyOptional()
  isArchived: boolean;

  @IsString()
  @IsOptional()
  @ApiPropertyOptional()
  sellerId: string;

  @IsNumber()
  @IsOptional()
  @ApiPropertyOptional()
  limit: number;

  @IsNumber()
  @IsOptional()
  @ApiPropertyOptional()
  page: number;
}

That am using the dto in this function

@Public()
  @HttpCode(HttpStatus.OK)
  @Get()
  @ApiOperation({
    summary: 'Get all plugs',
  })
  @ApiResponse({
    type: Plug,
    isArray: true,
  })
  findAll(@Query() filterPlugsDto: FilterPlugsDto) {
    console.log(filterPlugsDto);

    return this.plugService.findAll(filterPlugsDto);
  }

The problem i am having is what ever Boolean value i send, it always get sent as true.

if anyone can shed some light on this matter i really appreciate it.

viral fossil
#

Answer:

it turned out when using ValidationPipe's enableImplicitConversion it messes up the query value for boolean properties

app.useGlobalPipes(
    new ValidationPipe({
      transform: true,
      transformOptions: { enableImplicitConversion: true },
    }),
  );

so you need to transform the value manualy like so

@IsBoolean()
  @IsOptional()
  @Transform(({ obj, key }) => {
    console.log(obj[key]);

    return obj[key] === 'true';
  })
  @ApiPropertyOptional()
  isNew: boolean;