Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] como definir o tamanho de um array de uma entidade relacionada? ajuda

bom, eu criei uma api e ja to praticamente terminando, porem quero que minha compra tenha somente um produto por compra e nao poder mas add(POST) outro produto se ja existir, porem consigo add mais um produto e nao queria isso, queria que me mostrasse um erro ao tentar add mais um produto em uma compra que ja possui um, eu defino isso na entidade de compra ou produto? ou devo criar uma validacao pra verificar isso? como eu faco?

meus codigos: Insira aqui a descrição dessa imagem para ajudar na acessibilidade minhas entidades: produto Insira aqui a descrição dessa imagem para ajudar na acessibilidade compra entidade: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

alguem?

solução!

Oi John, tudo bem?

O que você quer pode ser feito de algumas maneiras, mas a mais simples seria adicionar uma validação no momento de criação de um novo produto para uma compra.

No seu caso, acho que cê tá usando TypeScript e algum ORM como o TypeORM para definir suas entidades, não? A relação entre CompraEntity e produtosPedidoEntity é definida como @OneToMany, o que permite múltiplos produtos para uma compra. Pra garantir que apenas um produto seja associado a uma compra, você pode tentar fazer assim:

Antes de salvar um novo produto, você pode verificar se a compra já possui um produto associado. Se sim, você pode lançar um erro.

async criaProduto(id: string, dados: criaProdutoDTO) {
  const compraId = await this.verificarId(id);

  // Verifique se a compra já possui um produto
  if (compraId.produtos && compraId.produtos.length > 0) {
    throw new Error('Esta compra já possui um produto associado.');
  }

  // Restante do seu código para criar o produto...
}

Se você quiser forçar essa regra a nível de banco de dados, você teria que mudar a relação para @OneToOne entre CompraEntity e produtosPedidoEntity. Isso garantiria que a compra só poderia ter um produto. Mas, isso exigiria uma mudança na estrutura do seu banco de dados e possivelmente em outras partes do seu código que dependem dessa relação.

@OneToOne(() => produtosPedidoEntity, (produto) => produto.compra)
produto: produtosPedidoEntity;

A primeira opção é uma validação de nível de aplicação e a segunda é uma restrição de nível de banco de dados. A escolha entre as duas depende de suas necessidades específicas e de como você quer que sua aplicação seja estruturada.

Um abraço e bons estudos.