1
resposta

Pergunta sobre Nested

Existe uma pergunta com o titulo "Nested" com o seguinte conteudo:

Qual a diferença entre os dois mapas a seguir ao serem utilizados para adicionar dados no banco?

{:produto/nome "Camiseta" :produto/slug "/camiseta" :produto/preco 30M :produto/id (model/uuid) :produto/categoria {:categoria/nome "Roupas" :categoria/id meu-uuid}}

{:produto/nome "Dama" :produto/slug "/dama" :produto/preco 15M :produto/id (model/uuid) :produto/categoria esporte-id}

A resposta correta é:

O primeiro utiliza uma categoria baseada no uuid e o segundo usa necessariamente uma categoria existente.

O id da primeira também pode existir e, portanto, não adicionar, somente referenciar.

Pra mim está um pouco confuso:

O primeiro não usa o look up ref, então provavelmente ele vai tentar criar uma categoria nova. Caso esse UUID já exista ele vai atualizar o nome da categoria ou ele vai ignorar o nome e simplesmente referenciar ainda que nao seja utilizado um lookup ref? Eu entendi que o lookup ref é utilizado com o [] e não com o {}. O correto seria:

{:produto/nome "Camiseta" :produto/slug "/camiseta" :produto/preco 30M :produto/id (model/uuid) :produto/categoria [:categoria/id meu-uuid]}

Dessa forma será utilizado o lookup ref.

(Vou testar o que acontece caso envia um objeto para ser criado porém ele já está criado na base de dados).

Obrigado! :)

1 resposta

Olá, Cesar, tudo bem?

Peço desculpas pela demora no retorno.

O primeiro mapa foi utilizado pelo instrutor em aula, para incluir um produto em uma nova categoria com um único comando, neste caso é utilizado apenas o Nested maps, ou seja, estamos informando um mapa dentro de outro mapa. Ao ser executado, caso a categoria já exista uma nova categoria seria criada:

{:produto/nome "Camiseta" 
:produto/slug "/camiseta" 
:produto/preco 30M 
:produto/id (model/uuid) 
:produto/categoria {
:categoria/nome "Roupas" 
:categoria/id meu-uuid}}

O segundo mapa também é utilizado em aula pelo instrutor, porém, ao executar o mapa da forma que estava apresentando, um erro seria retornado, pois, não passamos todas informações necessárias para utilizar o lookup, o mapa corrigido fica da seguinte forma:

{:produto/nome      "Dama"
  :produto/slug      "/Dama"
  :produto/preco     15M
   :produto/id        (model/uuid)
  :produto/categoria [
:categoria/id esporte-id]}

A atividade foi revisada e as correções necessárias foram realizadas.

Agradecemos o seu feedback!

Abraços e bons estudos!