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]) }