A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Integrando Swagger y PartialType con Open API

13/17
Recursos

npm install --save @nestjs/swagger swagger-ui-express

// src/main.ts

import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';

async function bootstrap() {
  ...
  const config = new DocumentBuilder()
    .setTitle('API')
    .setDescription('PLATZI STORE')
    .setVersion('1.0')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('docs', app, document);
  ...
  await app.listen(3000);
}
bootstrap();
# nest-cli.json
{
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "plugins": ["@nestjs/swagger/plugin"]
  }
}
// src/products/dtos/brand.dtos.ts
import { PartialType } from '@nestjs/swagger';
// src/products/dtos/category.dtos.ts
import { PartialType } from '@nestjs/swagger';
// src/products/dtos/products.dtos.ts
import { PartialType } from '@nestjs/swagger';
// src/users/dtos/customer.dto.ts
import { PartialType } from '@nestjs/swagger';
// src/users/dtos/user.dto.ts
import { PartialType } from '@nestjs/swagger';

Aportes 15

Preguntas 14

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Para que Swagger encuentre tus DTOs y Entities es necesario tener los archivos con extension .dto.ts y .entity.ts repectivamente

Buenas por si a alguien m谩s le pasa hice toda la configuraci贸n como el profesor pero los dtos no me reflejaban bien en la documentaci贸n solo los entities al mirar en la documentaci贸n me di cuenta que ellos le a帽aden otro decorador m谩s a los dtos. @ApiProperty()

https://docs.nestjs.com/openapi/mapped-types

Aqu铆 dejo un ejemplo de como quedar铆a un dto:

import { IsString, IsUrl, IsNotEmpty } from 'class-validator';
import { PartialType, ApiProperty } from '@nestjs/swagger';

export class CreateBrandDto {
  @ApiProperty() 
  @IsString()
  @IsNotEmpty()
  readonly name: string;

  @ApiProperty()
  @IsUrl()
  @IsNotEmpty()
  readonly image: string;
}

export class UpdateBrandDto extends PartialType(CreateBrandDto) {}

麓麓麓

Si tienes fallos, intenta con swagger 4.

npm i @nestjs/[email protected]4.5.12-next.1

No entiendo por qu茅 tengo errores con la ultima versi贸n 鈥楽wagger 5鈥, as铆 que esto es una alternativa.

Para los que no les funciona el swagger, se debe actualizar el repositorio
nest update -f -t latest

Est谩 muy buena la documentaci贸n que genera Swagger! muy facil.

  1. Instalamos las dependencias npm install --save @nestjs/swagger swagger-ui-express
  2. Editamos el archivo nest-cli.js
{
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "plugins": ["@nestjs/swagger"]
  }
}
  1. En el main.ts se agrega la configuracion de swagger antes de listen del server
const config = new DocumentBuilder()
    .setTitle('API')
    .setDescription('Store')
    .setVersion('1.0')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('docs', app, document);
  1. En los DTOs tenemos que importar el partialtype de swagger para que tome los cambios
import { PartialType } from '@nestjs/swagger';
  1. Borramos la carpeta dist rm -rf dist o click derecho borrar carpeta

  2. Ejecutamos la aplicacion npm run start:dev

PickType

Hay otra manera de extender las propiedades de un dto y seleccionar las que si son obligatorias. Imaginemos el escenario yo tengo un dto que tiene el modelo de un producto, necesito un dto que contenga el modelo de las unidades de un producto comprado y solo algunos datos del producto (id, nombre).

Defino el DTO de producto (padre)

import { ApiProperty } from '@nestjs/swagger';
export class ProductResponseDto {
  @IsString()
  @IsNotEmpty()
  @ApiProperty({ description: 'Product Id' })
  id: string;

  @IsString()
  @IsNotEmpty()
  @ApiProperty({ description: "Product's Name", example: 'Uniforme marca Titin' })
  @Expose()
  name: string;

  @IsString()
  @IsNotEmpty()
  @ApiProperty({ description: "Product's Sku", example: 'RBLL005' })
  @Expose()
  sku: string;

  @IsString()
  @ApiProperty({
    description: "Product's Description",
    example: 'American Drink',
  })
  @Expose()
  description: string;
}

DTO de producto comprado (hijo)

import { ApiProperty, PickType } from '@nestjs/swagger';

class ProductSaleResponseDto extends PickType(ProductResponseDto , [
  'id',
  'name',
]) {
  @IsNumber()
  @IsPositive()
  @ApiProperty({ description: 'Quantity product buy' })
  quantity: number;
}

Para que Swagger reconozca las DTOs es necesario borrar la carpeta dist y correr de nuevo el proyecto.
En Git Bash / Linux:

rm -rf dist

Mas clean no puede ser este seccion de cursos de NestJS 馃憣馃挌

si tratan de hacer el ejercicio al d铆a de hoy, deben actualizar esta dependencia si tiene problemas.

@nestjs/platform-express

Swagger nest

Me salia este error
Error: Cannot find module 鈥楡nestjs/core/router/route-path-factory鈥

la solucion esta aqui https://github.com/nestjs/swagger/issues/1433

Una consulta hice todo el proceso para ver los dto en swagger, pero el ultimo paso de rm-rf dist/ me sale rm no se reconoce como un comando interno o externo 鈥ntonces no puedo ver los dto como se podria solucionar ya que voy en la mitad de la clase 14, la que sigue de esta pero sigo sin ver los dto. muchas Gracias

Si eres usuario windows y no lo sabes, para eliminar archivos en lugar de utilizar el comando 鈥榬m -rf鈥 utiliza 鈥榙el鈥. En el ejemplo concreto de esta sesi贸n ser铆a:

del dist

Luego de esto escribe: YES o Y para aceptar.

Si como yo estan usando Fastify, necesitan instalar:

npm install --save @nestjs/swagger fastify-swagger

yarn:

yarn add @nestjs/swagger fastify-swagger