I'm researching the way on how to avoid to specify @ApiProperty() in each dto.
I know there is exist a way to create file nest-cli.json
, and if you specify Promise<DTO>
in your controller in nest-swagger it will produce the output dto from the route.
The structure looks like this:
nest-cli.json
{
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"plugins": [
{
"name": "@nestjs/swagger",
"options": {
"introspectComments": true
}
}
]
}
}
controller.ts
@Get()
async getMonitors (): Promise<OutputMonitorsDto> { // <-- Here is my outputDto
return this.monitorsService.getMonitors()
}
And in swagger it shows something like this:
However, is there any way to setup NestJs to have the same things with inputDTO and not to write in each dto @ApiProperty
?
As in example below:
ExampleDto.ts
export class GetListUsersDto {
@ApiProperty()
@IsString()
name: string
@ApiProperty()
@IsString()
email: string
@ApiProperty()
@IsString()
publicApiKey: string
@ApiProperty()
@IsBoolean()
isAdmin: boolean
@ApiProperty()
@IsBoolean()
isDesigner: boolean
@ApiProperty()
@IsBoolean()
isEditor: boolean
@ApiProperty()
@IsBoolean()
isEnabled: boolean
@ApiProperty()
@IsString()
boughtProduct: string
}
And only after @ApiProperty it will show the structure as shown above for input in swagger.