datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" binaryTargets = ["native", "debian-openssl-1.1.x"] } model Team { id String @id @default(cuid()) name String members TeamMember[] TeamInvitation TeamInvitation[] TeamCollection TeamCollection[] TeamRequest TeamRequest[] TeamEnvironment TeamEnvironment[] } model TeamMember { id String @id @default(uuid()) // Membership ID role TeamMemberRole userUid String teamID String team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) @@unique([teamID, userUid]) } model TeamInvitation { id String @id @default(cuid()) teamID String team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) creatorUid String inviteeEmail String inviteeRole TeamMemberRole @@unique([teamID, inviteeEmail]) @@index([teamID]) } model TeamCollection { id String @id @default(cuid()) parentID String? parent TeamCollection? @relation("TeamCollectionChildParent", fields: [parentID], references: [id]) children TeamCollection[] @relation("TeamCollectionChildParent") requests TeamRequest[] teamID String team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) title String } model TeamRequest { id String @id @default(cuid()) collectionID String collection TeamCollection @relation(fields: [collectionID], references: [id], onDelete: Cascade) teamID String team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) title String request Json } model Shortcode { id String @id request Json creatorUid String? createdOn DateTime @default(now()) @@unique(fields: [id, creatorUid], name: "creator_uid_shortcode_unique") } model TeamEnvironment { id String @id @default(cuid()) teamID String team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) name String variables Json } model User { id String @id @default(cuid()) name String? email String? @unique image String? isAdmin Boolean @default(false) refreshToken String? accounts Account[] createdOn DateTime @default(now()) @db.Timestamptz(3) PasswordlessVerification PasswordlessVerification[] } model Account { id String @id @default(cuid()) userId String provider String providerAccountId String providerRefreshToken String? providerAccessToken String? providerScope String? loggedIn DateTime @default(now()) @db.Timestamptz(3) user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique(fields: [provider, providerAccountId], name: "verifyProviderAccount") } model PasswordlessVerification { deviceIdentifier String token String @unique @default(cuid()) userUid String user User @relation(fields: [userUid], references: [id], onDelete: Cascade) expiresOn DateTime @db.Timestamptz(3) @@unique(fields: [deviceIdentifier, token], name: "passwordless_deviceIdentifier_tokens") } enum TeamMemberRole { OWNER VIEWER EDITOR }