Skip to content

Instantly share code, notes, and snippets.

@steida
Created June 1, 2018 14:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save steida/abdf94fe8e353002f31403ff42a2d482 to your computer and use it in GitHub Desktop.
Save steida/abdf94fe8e353002f31403ff42a2d482 to your computer and use it in GitHub Desktop.
# https://github.com/este/este/wiki/GraphQL
# https://www.prisma.io/features/data-modeling/
# The order of types and consistent relations names is probably a pattern.
type User {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
email: String! @unique
password: String!
# Optional, because it will be replaced with Theme soon. Evolving ftw.
themeName: String
webs: [Web!]! @relation(name: "UserWebsWebCreator")
pages: [Page!]! @relation(name: "UserPagesPageCreator")
childrens: [Children!]! @relation(name: "UserChildrensChildrenCreator")
elements: [Element!]! @relation(name: "UserElementsElementCreator")
images: [Image!]! @relation(name: "UserImagesImageCreator")
}
type Web {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
creator: User! @relation(name: "UserWebsWebCreator")
published: Boolean! @default(value: "false")
name: String!
domain: String!
pages: [Page!]! @relation(name: "WebPagesPageWeb")
# For autocomplete for example.
childrens: [Children!]! @relation(name: "WebChildrensChildrenWeb")
}
type Page {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
creator: User! @relation(name: "UserPagesPageCreator")
published: Boolean! @default(value: "false")
title: String!
web: Web! @relation(name: "WebPagesPageWeb")
children: Children!
}
type Children {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
creator: User! @relation(name: "UserChildrensChildrenCreator")
# null, Header, MainNav, whatever for semantic, look, and behavior.
name: String
web: Web! @relation(name: "WebChildrensChildrenWeb")
children: [Child!]! @relation(name: "ChildrenChildrenChildParent")
}
type Child {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
creator: User!
parent: Children! @relation(name: "ChildrenChildrenChildParent")
index: Int!
element: Element!
}
type Element {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
creator: User! @relation(name: "UserElementsElementCreator")
# For semantic, look, and behavior.
name: String!
markdown: String
images: [Image!]! @relation(name: "ElementImagesImageElements")
children: Children
}
type Image {
id: ID! @unique
createdAt: DateTime!
creator: User! @relative(name: "UserImagesImageCreator")
src: String!
width: Int!
height: Int!
elements: [Image!]! @relation(name: "ElementImagesImageElements")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment