2
respostas

[Dúvida] Problemas no exercício sobre relacionamentos no Prisma

Olá.

Estou com duas dúvidas neste exercício sobre relacionamentos no Prisma. A questão era qual resposta criava o modelo Recommendation de modo que fosse possível rastrear a pessoa que fez uma recomendação de livro e a pessoa que recebeu a recomendação.

A resposta indicada como correta foi essa:

model User {
  id            Int          @id @default(autoincrement())
  recommendationsMade   Recommendation[] @relation("Recommender")
  recommendationsReceived Recommendation[] @relation("Recommendee")
}

model Recommendation {
  id          Int      @id @default(autoincrement())
  bookId      Int
  recommenderId Int    @relation(name: "Recommender", fields: [recommenderId], references: [id])
  recommendeeId Int    @relation(name: "Recommendee", fields: [recommendeeId], references: [id])
  book        Book     @relation(fields: [bookId], references: [id])
  recommender User     @relation(name: "Recommender")
  recommendee User     @relation(name: "Recommendee")
}

Minha primeira dúvida é com relação ao jeito como foi criado o relacionamento em Recommendation, pois está diferente de como foi ensinado na aula. Na resposta, o @relation com fields e references está sendo colocado em recommenderId, e não em recommender. O certo não seria o contrário?

Ao invés de:

recommenderId Int    @relation(name: "Recommender", fields: [recommenderId], references: [id])
recommender User     @relation(name: "Recommender")

Não deveria ser:

recommenderId Int // para que colocar @relation aqui?
recommender User @relation(name: "Recommender", fields: [recommenderId], references: [id])

Ou isso não importa para o Prisma?

O mesmo probleme acontece para recommendeeId e recommendee.

Minha segunda dúvida é: por que a alternativa E foi considerada incorreta? Eu acredito que ela faz a mesma coisa (apresentando o mesmo problema com @relation apontado acima), só usando nomes diferentes para as relações e propriedades. A própria explicação para a alternativa E diz que "tecnicamente possa ser uma abordagem válida". Talvez seria melhor modificar essa alternativa para ser de fato incorreta.

Obrigado.

2 respostas

É só uma forma diferente de fazer, amigo.

Sobre a letra E, o problema é o uso do @relation em senderId e receiverId, em vez de sender e receiver.

Eu agradeço sua intenção em tentar me ajudar, mas acredito que não seja isso.

Ontem tentei rodar a resposta do exercício no schema.prisma e o seguinte problema foi reportado no VS Code: "Error parsing attribute "@relation": Invalid field type, not a relation.". Quando eu altero para o que eu escrevi na dúvida, que é como é feito na aula, o VS Code não aponta erro.

Sobre a letra E, se o problema for esse, então a letra B também deveria estar errada, pois foi o problema que eu apontei na minha primeira dúvida. Além disso, ambas as respostas, B e E, são semelhantes e o que muda são os nomes usados para as relations e os campos.

Obrigado!