1
resposta

[Sugestão] Para você que finalizou o curso, veja esse tópico.

Olá a todos, espero que estejam bem.
A intenção nesse tópico de sugestão é ajudar você a finalizar o projeto com apenas uma observação na parte de atualização de produto.

Aviso: Meu projeto foi desenvolvido com os nomes em inglês por motivos de que eu prefiro assim kkkkk, então veja o nome do arquivo e associe com o que foi desenvolvido em português.

Registro de novo produto

Ao tentar finalizar o projeto em 09/2025 você encontrará a barreira do O PRODUTO NÃO CRIA, e sim é um problema de como o curso foi desenvolvido, o seu Postman ou Insomnia vai retornar algo parecido com isso ao tentar registrar um produto.

{
    "message": [
        "features.0.property id should not exist",
        "features.0.property product should not exist",
        "features.1.property id should not exist",
        "features.1.property product should not exist",
        "features.2.property id should not exist",
        "features.2.property product should not exist",
        "images.0.property id should not exist",
        "images.0.property product should not exist"
    ],
    "error": "Bad Request",
    "statusCode": 400
}

Esse erro acontece por que as propriedades estão sendo adicionadas automaticamente e não precisam estar nos DTOs de cada tabela. Para resolvermos isso precisamos remover no arquivo create-product.dto.ts as propriedades id e product das class ProductFeatureDTO e ProductImageDTO

Ficando assim ambas:

export class ProductFeatureDTO {
  @IsString()
  @IsNotEmpty()
  name: string;

  @IsString()
  @IsNotEmpty()
  description: string;
}

export class ProductImageDTO {
  @IsUrl()
  url: string;

  @IsString()
  @IsNotEmpty()
  description: string;
}

Corrigido isso, seu arquivo product.controller.ts estará com erro nas linhas referentes aos campos features e images, é um erro relacionado as tipagens não serem iguais.

Para corrigirmos isso é bem simples, só precisamos fazer um map das informações vindas da request, abaixo está como ficaria o código.

Não esqueça de importa as classes relacionadas!!


 productEntity.features = data.features.map(featureDto => {
    const feature = new ProductFeatureEntity();
    feature.name = featureDto.name;
    feature.description = featureDto.description;
    
    return feature;
});
 
 productEntity.images = data.images.map(imgDto => {
      const image = new ProductImageEntity();
      image.url = imgDto.url;
      image.description = imgDto.description;

      return image;
    });

E pronto com isso temos o registro funcional.

Sobre o update de produto

Desista de ajustar o update de produto kkk, é apenas mais uma coisa para se estressar e no momento que escrevo esse tópico, estou com preguiça de me aprofundar na correção do mesmo, se alguém aparecer com ele corrigido comente nesse tópico para os próximos com problemas.

Mas para não deixar vocês não, recomendo fazer o seguinte, foi o que eu fiz. Comente toda a parte de update de images e features do arquivo update-product.dto.ts
Tudo que tiver comenta você não vai usar, pode remover ou manter comentado.

// import { Type } from 'class-transformer';
import {
  // ArrayMinSize,
  // IsArray,
  // ValidateNested,
  IsNotEmpty,
  IsNumber,
  IsOptional,
  IsString,
  IsUUID,
  Min,
} from 'class-validator';
// import { ProductFeatureDTO, ProductImageDTO } from './create-product.dto';

export class UpdateProductDTO {
  @IsUUID()
  id: string;

  @IsUUID()
  userId: string;

  @IsString()
  @IsNotEmpty()
  @IsOptional()
  name: string;

  @IsNumber()
  @IsOptional()
  @Min(1)
  @IsOptional()
  value: number;

  @IsNumber()
  @Min(0)
  @IsOptional()
  amount: number;

  @IsString()
  @IsOptional()
  description: string;
  
  // @ValidateNested()
  // @IsArray()
  // @ArrayMinSize(3)
  // @Type(() => ProductFeatureDTO)
  // @IsOptional()
  // features: ProductFeatureDTO[];

  // @ValidateNested()
  // @IsArray()
  // @ArrayMinSize(1)
  // @Type(() => ProductImageDTO)
  // @IsOptional()
  // images: ProductImageDTO[];

  @IsString()
  @IsNotEmpty()
  @IsOptional()
  category: string;
}

Bem, é isso que tenho para tentar ajudar a você que está com problemas para finalizar o curso, segue o link do meu repositório para consulta sua caso necessário, só entrar na pasta nodejs/nestjs-criando-api-restfull que código estará lá.

Deixo também meus parabéns, você chegou até o final do projeto mesmo com vários problemas, não desista agora! Persista e seu caminho será brilhante!

1 resposta

Olá Maurício! Como vai?

Muito obrigado por compartilhar sua experiência e sugestões com a comunidade! É sempre valioso ter contribuições como a sua, especialmente quando se trata de resolver problemas que outros estudantes podem enfrentar ao longo do curso.

Sua atitude positiva e disposição para ajudar são inspiradoras!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!