generator client { provider = "prisma-client-js" binaryTargets = ["native", "debian-openssl-3.0.x"] } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model Workspace { id String @id @default(uuid()) @db.VarChar public Boolean createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6) users UserWorkspacePermission[] blobs Blob[] docs Doc[] optimizedBlobs OptimizedBlob[] @@map("workspaces") } model UserWorkspacePermission { id String @id @default(uuid()) @db.VarChar workspaceId String @map("workspace_id") @db.VarChar userId String @map("entity_id") @db.VarChar /// Read/Write/Admin/Owner type Int @db.SmallInt /// Whether the permission invitation is accepted by the user accepted Boolean @default(false) createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6) user User @relation(fields: [userId], references: [id], onDelete: Cascade) workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade) @@map("user_workspace_permissions") } model User { id String @id @default(uuid()) @db.VarChar name String email String? @unique emailVerified DateTime? @map("email_verified") // image field is for the next-auth avatarUrl String? @map("image") @db.VarChar accounts Account[] sessions Session[] workspaces UserWorkspacePermission[] createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6) /// Not available if user signed up through OAuth providers password String? @db.VarChar @@map("users") } model Account { id String @id @default(cuid()) userId String @map("user_id") type String provider String providerAccountId String @map("provider_account_id") 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? user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([provider, providerAccountId]) @@map("accounts") } model Session { id String @id @default(cuid()) sessionToken String @unique @map("session_token") userId String @map("user_id") expires DateTime user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@map("sessions") } model VerificationToken { identifier String token String @unique expires DateTime @@unique([identifier, token]) @@map("verificationtokens") } model Blob { hash String @id @default(uuid()) @db.VarChar workspaceId String @map("workspace_id") @db.VarChar blob Bytes @db.ByteA length Int createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6) workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade) @@unique([workspaceId, hash]) @@map("blobs") } model OptimizedBlob { hash String @id @default(uuid()) @db.VarChar workspaceId String @map("workspace_id") @db.VarChar params String @db.VarChar blob Bytes @db.ByteA length Int createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6) workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade) @@unique([workspaceId, hash, params]) @@map("optimized_blobs") } model Doc { id Int @id @default(autoincrement()) @db.Integer workspaceId String @map("workspace_id") @db.VarChar guid String @db.VarChar is_workspace Boolean @default(true) @db.Boolean blob Bytes @db.ByteA createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6) workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade) @@index([workspaceId, guid]) @@map("docs") }