tabletop-commander/prisma/schema.prisma

167 lines
4.5 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model GameSystem {
id String @id @default(cuid())
schemas Schema[]
author User @relation(fields: [authorId], references: [id])
authorId String
name String @unique
created DateTime @default(now())
}
model Schema {
id String @id @default(cuid())
gameSystem GameSystem? @relation(fields: [gameSystemId], references: [id])
gameSystemId String?
publications Publication[]
author User @relation(fields: [authorId], references: [id])
authorId String
name String
SchemaRevision SchemaRevision[]
}
model SchemaRevision {
id String @id @default(cuid())
schemaId String
parentSchema Schema @relation(fields: [schemaId], references: [id])
schema Json
types Json
version Int
Publication Publication[]
@@unique([schemaId, version])
}
model Publication {
id String @id @default(cuid())
schema Schema @relation(fields: [schemaId], references: [id])
schemaId String
schemaVersion Int
schemaRevision SchemaRevision @relation(fields: [schemaVersion, schemaId], references: [version, schemaId])
tags Tag[]
name String
TagsOnPublications TagsOnPublications[]
PublicationRevision PublicationRevision[]
}
model PublicationRevision {
id String @id @default(cuid())
version String
isFinal Boolean
data Json
previousId String?
publicationId String
publication Publication @relation(fields: [publicationId], references: [id])
previousRevision PublicationRevision? @relation(name: "downlineRevisions", fields: [previousId], references: [id])
downlineRevisions PublicationRevision[] @relation("downlineRevisions")
author User @relation(fields: [authorId], references: [id])
authorId String
@@unique([publicationId, version])
}
model TagsOnPublications {
publication Publication @relation(fields: [publicationId], references: [id])
publicationId String
tagId String
tag Tag @relation(fields: [tagId], references: [id])
@@id([publicationId, tagId])
}
model Tag {
id String @id @default(cuid())
name String
Publication Publication? @relation(fields: [publicationId], references: [id])
publicationId String?
TagsOnPublications TagsOnPublications[]
childTagsOnTags TagsOnTags[] @relation("childTag")
parentTagsOnTags TagsOnTags[] @relation("parentTag")
}
model TagsOnTags {
parentTagId String
parentTag Tag @relation(fields: [parentTagId], references: [id], "parentTag")
childTagId String
childTag Tag @relation(fields: [childTagId], references: [id], "childTag")
@@id([parentTagId, childTagId])
}
model User {
id String @id @default(cuid())
schemas Schema[]
gameSystems GameSystem[]
name String?
username String? @unique
email String? @unique
emailVerified DateTime?
passwordHash String?
image String?
accounts Account[]
sessions Session[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
PublicationRevision PublicationRevision[]
}
model Account {
id String @id @default(cuid())
userId String @unique
type String
provider String
providerAccountId String
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
refresh_token_expires_in Int?
user User? @relation(fields: [userId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([provider, providerAccountId])
@@index([userId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId])
}
model VerificationToken {
identifier String
token String
expires DateTime
@@unique([identifier, token])
}