Hi everyone! I am trying to start a new project wi...
# orm-help
h
Hi everyone! I am trying to start a new project with GraphQL and prisma recently. But there are some issues in getting a "good" modelling of my data. Basically I want to let people register with google login, and they can choose to be either
student
or
teacher
. Student can only
createQuestion
and teachers can only
answerQuestion
. As I come from the REST world, when I first constructed the data model, I started with
Copy code
type Question {
   student: User! @relation(name:"ask")
   teacher: User @relation(name:"answer")
}
type User {
   askedQuestions: [Question!]! @relation(name:"ask")
   answeredQuestions: [Question!]! @relation(name:"answer")
   role: Role! // enum Role { New Student Teacher }
}
Quickly I found that a lot of post-query logic has to be done (on choosing which variable to process on
getUser
for example) on the client side, which should not happen. I thought of two roles sharing the same variable
questions
because their functions are exclusive, but this would be SO confusing for further development. Then I learnt
implements
feature of GraphQL and tried the following in `datamodel.graphql`:
Copy code
type Question {
   student: Student!
   teacher: Teacher
}
interface User { role: Role! }
type Student implements User { askedQuestions: [Question!]! }
type Teacher implements User { answeredQuestions: [Question!]! }
I omitted the repeated fields for simplicity. I learnt this from https://graphql.org/learn/schema/ , and that is actually what I want: role-based fields. Then I found out that prisma will flatten all
implements
and give me different types. I started to realize that I should put this in
schema.graphql
rather than
datamodel.graphql
. But then, how can I construct my
datamodel.graphql
? Should I first make a
User
type like the first paragraph of code, then implement a schema like the second one, followed by resolvers to fetch from
ctx.db.Users
? Please let me know if I am on the right track! Thanks so much!