Files
formbricks/packages/database/prisma/schema.prisma
T
2022-11-26 11:55:57 +01:00

145 lines
4.4 KiB
Plaintext

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
referentialIntegrity = "prisma"
}
generator client {
provider = "prisma-client-js"
previewFeatures = ["referentialIntegrity"]
}
enum PipelineType {
WEBHOOK
EMAIL_NOTIFICATION
}
model Pipeline {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @updatedAt @map(name: "updated_at")
name String
type PipelineType
form Form @relation(fields: [formId], references: [id], onDelete: Cascade)
formId Int
enabled Boolean @default(false)
config Json @default("{}")
}
model Customer {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @updatedAt @map(name: "updated_at")
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
teamId Int
Submissions Submission[]
data Json @default("{}")
}
model Form {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @updatedAt @map(name: "updated_at")
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
teamId Int
schema Json @default("{}")
submission Submission[]
Pipeline Pipeline[]
}
model Submission {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @updatedAt @map(name: "updated_at")
Team Team? @relation(fields: [teamId], references: [id])
teamId Int?
form Form @relation(fields: [formId], references: [id], onDelete: Cascade)
formId Int
customer Customer @relation(fields: [customerId], references: [id])
customerId Int
data Json @default("{}")
}
model Team {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @updatedAt @map(name: "updated_at")
name String
members Membership[]
forms Form[]
Customer Customer[]
Submission Submission[]
}
enum MembershipRole {
MEMBER
ADMIN
OWNER
}
model Membership {
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
teamId Int
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId Int
accepted Boolean @default(false)
role MembershipRole
@@id([userId, teamId])
}
model ApiKey {
id Int @id @unique @default(autoincrement())
createdAt DateTime @default(now())
lastUsedAt DateTime?
label String?
hashedKey String @unique()
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId Int
}
enum IdentityProvider {
EMAIL
GITHUB
}
model Account {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @updatedAt @map(name: "updated_at")
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
userId Int
type String
provider String
providerAccountId String
access_token String? @db.Text
refresh_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
@@unique([provider, providerAccountId])
}
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map(name: "created_at")
updatedAt DateTime @updatedAt @map(name: "updated_at")
name String?
email String @unique
emailVerified DateTime? @map(name: "email_verified")
password String?
identityProvider IdentityProvider @default(EMAIL)
identityProviderAccountId String?
teams Membership[]
accounts Account[]
ApiKey ApiKey[]
@@map(name: "users")
}