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 followers GameSystemFollows[] name String @unique created DateTime @default(now()) isPublic Boolean @default(false) } 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]) Publication Publication[] fields Json @default("{}") types Json @default("{}") version Int @default(0) isFinal Boolean @default(false) @@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]) PublicationRevision PublicationRevision[] tags Tag[] name String // TagsOnPublications TagsOnPublications[] } model PublicationRevision { id String @id @default(cuid()) Tag Tag[] 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 version String isFinal Boolean @default(false) data Json @default("{}") @@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 PublicationRevision PublicationRevision @relation(fields: [publicationRevisionId], references: [id]) publicationRevisionId String // TagsOnPublications TagsOnPublications[] } model User { id String @id @default(cuid()) schemas Schema[] gameSystems GameSystem[] accounts Account[] sessions Session[] PublicationRevision PublicationRevision[] followedSystems GameSystemFollows[] name String? username String? @unique email String? @unique emailVerified DateTime? passwordHash String? image String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model GameSystemFollows { gameSystemId String gameSystem GameSystem @relation(fields: [gameSystemId], references: [id]) userId String user User @relation(fields: [userId], references: [id]) @@id([userId, gameSystemId]) } 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]) }