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.