generator client { provider = "prisma-client-js" engineType = "binary" } datasource db { provider = "postgresql" url = env("PG_DATABASE_URL") } generator nestgraphql { provider = "node node_modules/prisma-nestjs-graphql" output = "../../src/core/@generated" noAtomicOperations = true // field validator fields_Validator_input = true fields_Validator_output = true fields_Validator_model = true fields_Validator_from = "class-validator" // All relations, only allow connect decorate_all_type = "!(ActivityTarget*Input|UserSettingsUpdateOneRequiredWithoutUserNestedInput)" decorate_all_field = "*(create|connectOrCreate|update|upsert|delete|createMany|updateMany|deleteMany)" decorate_all_name = "HideField" decorate_all_from = "@nestjs/graphql" decorate_all_arguments = "[]" // Activity: Only Allow targets createOrConnect / createMany decorate_activityTargets_type = "*ActivityTarget*Input" decorate_activityTargets_field = "*(update|upsert|updateMany)" decorate_activityTargets_name = "HideField" decorate_activityTargets_from = "@nestjs/graphql" decorate_activityTargets_arguments = "[]" // User Settings: Only Allow targets createOrConnect / createMany decorate_userSettings_type = "*UserSettingsUpdateOneRequiredWithoutUserNestedInput" decorate_userSettings_field = "!(update)" decorate_userSettings_name = "HideField" decorate_userSettings_from = "@nestjs/graphql" decorate_userSettings_arguments = "[]" // Disable _count on all models except Aggregation use case decorate_count_type = "!(*Aggregate*|*GroupBy*|*OrderBy*)" decorate_count_field = "_count" decorate_count_name = "HideField" decorate_count_from = "@nestjs/graphql" decorate_count_arguments = "[]" // create data validator decorate_classValidator_type = "@(Create|Update|Upsert)*Args" decorate_classValidator_field = "@(data|[A-Z]*)" decorate_classValidator_name = ValidateNested decorate_classValidator_from = "class-validator" decorate_classValidator_arguments = "['{each: true}']" // create data transformer decorate_classTransformer_type = "@(Create|Update|Upsert)*Args" decorate_classTransformer_field = "@(data|[A-Z]*)" decorate_classTransformer_from = "class-transformer" decorate_classTransformer_arguments = "['() => {propertyType.0}']" decorate_classTransformer_name = Type } model User { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @Validator.IsString() /// @Validator.IsOptional() firstName String? /// @Validator.IsString() /// @Validator.IsOptional() lastName String? /// @Validator.IsEmail() /// @Validator.IsOptional() email String @unique /// @Validator.IsBoolean() /// @Validator.IsOptional() emailVerified Boolean @default(false) /// @Validator.IsString() /// @Validator.IsOptional() avatarUrl String? /// @Validator.IsString() /// @Validator.IsOptional() locale String /// @Validator.IsString() /// @Validator.IsOptional() phoneNumber String? /// @Validator.IsDate() /// @Validator.IsOptional() lastSeen DateTime? /// @Validator.IsBoolean() /// @Validator.IsOptional() disabled Boolean @default(false) /// @TypeGraphQL.omit(input: true, output: true) passwordHash String? /// @Validator.IsJSON() /// @Validator.IsOptional() metadata Json? /// @Validator.IsBoolean() /// @Validator.IsOptional() canImpersonate Boolean @default(false) /// @TypeGraphQL.omit(input: true) workspaceMember WorkspaceMember? companies Company[] /// @TypeGraphQL.omit(input: true, output: true) refreshTokens RefreshToken[] comments Comment[] authoredActivities Activity[] @relation(name: "authoredActivities") assignedActivities Activity[] @relation(name: "assignedActivities") authoredAttachments Attachment[] @relation(name: "authoredAttachments") settings UserSettings @relation(fields: [settingsId], references: [id]) settingsId String @unique /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("users") } enum ColorScheme { Light Dark System } model UserSettings { id String @id @default(uuid()) /// @Validator.IsString() /// @Validator.IsOptional() colorScheme ColorScheme @default(System) /// @Validator.IsString() locale String user User? WorkspaceMember WorkspaceMember[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("user_settings") } /// @TypeGraphQL.omit(input: true) model Workspace { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @Validator.IsString() /// @Validator.IsOptional() domainName String? /// @Validator.IsString() /// @Validator.IsOptional() displayName String? /// @Validator.IsString() /// @Validator.IsOptional() logo String? /// @Validator.IsString() /// @Validator.IsOptional() inviteHash String? workspaceMember WorkspaceMember[] companies Company[] people Person[] activities Activity[] comments Comment[] pipelines Pipeline[] pipelineStages PipelineStage[] pipelineProgresses PipelineProgress[] activityTargets ActivityTarget[] viewFields ViewField[] viewFilters ViewFilter[] views View[] viewSorts ViewSort[] /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt Attachment Attachment[] @@map("workspaces") } model WorkspaceMember { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @Validator.IsBoolean() /// @Validator.IsOptional() allowImpersonation Boolean @default(true) user User @relation(fields: [userId], references: [id]) userId String @unique /// @TypeGraphQL.omit(input: true, output: false) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt Favorite Favorite[] authoredActivities Activity[] @relation(name: "authoredActivities") assignedActivities Activity[] @relation(name: "assignedActivities") authoredAttachments Attachment[] @relation(name: "authoredAttachments") settings UserSettings? @relation(fields: [settingsId], references: [id]) settingsId String? companies Company[] comments Comment[] @@map("workspace_members") } model Company { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @Validator.IsString() /// @Validator.IsOptional() name String /// @Validator.IsString() /// @Validator.IsOptional() domainName String /// @Validator.IsString() /// @Validator.IsOptional() linkedinUrl String? /// @Validator.IsNumber() /// @Validator.IsOptional() annualRecurringRevenue Int? /// @Validator.IsBoolean() /// @Validator.IsOptional() idealCustomerProfile Boolean @default(false) /// @Validator.IsString() /// @Validator.IsOptional() xUrl String? /// @Validator.IsString() /// @Validator.IsOptional() address String /// @Validator.IsNumber() /// @Validator.IsOptional() employees Int? people Person[] accountOwner User? @relation(fields: [accountOwnerId], references: [id], onDelete: SetNull) accountOwnerId String? workspaceMemberAccountOwner WorkspaceMember? @relation(fields: [workspaceMemberAccountOwnerId], references: [id], onDelete: SetNull) workspaceMemberAccountOwnerId String? /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt ActivityTarget ActivityTarget[] PipelineProgress PipelineProgress[] Favorite Favorite[] Attachment Attachment[] @@map("companies") } model Person { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @Validator.IsString() /// @Validator.IsOptional() firstName String? /// @Validator.IsString() /// @Validator.IsOptional() lastName String? /// @Validator.IsString() /// @Validator.IsOptional() email String? /// @Validator.IsString() /// @Validator.IsOptional() linkedinUrl String? /// @Validator.IsString() /// @Validator.IsOptional() xUrl String? /// @Validator.IsString() /// @Validator.IsOptional() jobTitle String? /// @Validator.IsString() /// @Validator.IsOptional() phone String? /// @Validator.IsString() /// @Validator.IsOptional() city String? /// @Validator.IsString() /// @Validator.IsOptional() avatarUrl String? company Company? @relation(fields: [companyId], references: [id], onDelete: SetNull) companyId String? /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String contactPipelineProgresses PipelineProgress[] @relation("PointOfContactPipelineProgress") /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt ActivityTarget ActivityTarget[] PipelineProgress PipelineProgress[] Favorite Favorite[] Attachment Attachment[] @@map("people") } model RefreshToken { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @TypeGraphQL.omit(input: true, output: true) user User @relation(fields: [userId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) userId String expiresAt DateTime /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? /// @TypeGraphQL.omit(input: true, output: true) revokedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("refresh_tokens") } enum ActivityType { Note Task } model Activity { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) body String? title String? type ActivityType @default(Note) reminderAt DateTime? dueAt DateTime? completedAt DateTime? activityTargets ActivityTarget[] comments Comment[] attachments Attachment[] author User @relation(fields: [authorId], references: [id], name: "authoredActivities", onDelete: Cascade) authorId String workspaceMemberAuthor WorkspaceMember? @relation(fields: [workspaceMemberAuthorId], references: [id], name: "authoredActivities", onDelete: Cascade) workspaceMemberAuthorId String? assignee User? @relation(fields: [assigneeId], references: [id], name: "assignedActivities", onDelete: SetNull) assigneeId String? workspaceMemberAssignee WorkspaceMember? @relation(fields: [workspaceMemberAssigneeId], references: [id], name: "assignedActivities", onDelete: SetNull) workspaceMemberAssigneeId String? /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("activities") } model Comment { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @Validator.IsString() body String author User @relation(fields: [authorId], references: [id], onDelete: Cascade) authorId String workspaceMemberAuthor WorkspaceMember? @relation(fields: [workspaceMemberAuthorId], references: [id], onDelete: Cascade) workspaceMemberAuthorId String? activity Activity? @relation(fields: [activityId], references: [id], onDelete: Cascade) activityId String? commentThreadId String? /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("comments") } model ActivityTarget { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) activity Activity @relation(fields: [activityId], references: [id], onDelete: Cascade) activityId String /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String personId String? person Person? @relation(fields: [personId], references: [id], onDelete: Cascade) companyId String? company Company? @relation(fields: [companyId], references: [id], onDelete: Cascade) /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("activity_targets") } // All of the world's currently active currencies based on the ISO 4217 standard enum Currency { AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BOV BRL BSD BTN BWP BYN BZD CAD CDF CHF CLF CLP CNY COP COU CRC CUC CUP CVE CZK DJF DKK DOP DZD EGP ERN ETB EUR FJD FKP GBP GEL GHS GIP GMD GNF GTQ GYD HKD HNL HRK HTG HUF IDR ILS INR IQD IRR ISK JMD JOD JPY KES KGS KHR KMF KPW KRW KWD KYD KZT LAK LBP LKR LRD LSL LYD MAD MDL MGA MKD MMK MNT MOP MRO MRU MUR MVR MWK MXN MXV MYR MZN NAD NGN NIO NOK NPR NZD OMR PAB PEN PGK PHP PKR PLN PYG QAR RON RSD RUB RWF SAR SBD SCR SDD SDG SEK SGD SHP SLL SOS SRD SSP STD STN SVC SYP SZL THB TJS TMM TMT TND TOP TRY TTD TWD TZS UAH UGX USD UYU UZS VEF VES VND VUV WST XAF XCD XOF XPF XSU XUA YER ZAR ZMW ZWL } model Pipeline { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @Validator.IsString() name String /// @Validator.IsString() icon String pipelineStages PipelineStage[] pipelineProgresses PipelineProgress[] pipelineProgressableType PipelineProgressableType @default(Company) /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt currency Currency @default(USD) @@map("pipelines") } model PipelineStage { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) /// @Validator.IsString() /// @Validator.IsOptional() name String /// @Validator.IsString() /// @Validator.IsOptional() type String /// @Validator.IsOptional() /// @Validator.IsString() color String /// @Validator.IsNumber() /// @Validator.IsOptional() index Int? pipelineProgresses PipelineProgress[] /// pipeline Pipeline @relation(fields: [pipelineId], references: [id], onDelete: Cascade) pipelineId String /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("pipeline_stages") } enum PipelineProgressableType { Person Company } model PipelineProgress { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) amount Int? closeDate DateTime? probability Int? pipeline Pipeline @relation(fields: [pipelineId], references: [id], onDelete: Cascade) pipelineId String pipelineStage PipelineStage @relation(fields: [pipelineStageId], references: [id], onDelete: Cascade) pipelineStageId String pointOfContact Person? @relation("PointOfContactPipelineProgress", fields: [pointOfContactId], references: [id], onDelete: SetNull) pointOfContactId String? /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt companyId String? company Company? @relation(fields: [companyId], references: [id], onDelete: Cascade) personId String? person Person? @relation(fields: [personId], references: [id], onDelete: Cascade) @@map("pipeline_progresses") } enum AttachmentType { Image Audio Video TextDocument Spreadsheet Archive Other } model Attachment { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) fullPath String type AttachmentType name String /// @TypeGraphQL.omit(input: true, output: true) workspaceId String author User @relation(fields: [authorId], references: [id], name: "authoredAttachments", onDelete: Cascade) authorId String workspaceMemberAuthor WorkspaceMember? @relation(fields: [workspaceMemberAuthorId], references: [id], name: "authoredAttachments", onDelete: Cascade) workspaceMemberAuthorId String? activity Activity? @relation(fields: [activityId], references: [id], onDelete: Cascade) activityId String? /// @TypeGraphQL.omit(input: true, output: false) person Person? @relation(fields: [personId], references: [id], onDelete: Cascade) personId String? /// @TypeGraphQL.omit(input: true, output: false) company Company? @relation(fields: [companyId], references: [id], onDelete: Cascade) companyId String? /// @TypeGraphQL.omit(input: true, output: false) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("attachments") } model Favorite { id String @id @default(uuid()) workspaceId String? /// @TypeGraphQL.omit(input: true, output: false) person Person? @relation(fields: [personId], references: [id], onDelete: Cascade) personId String? /// @TypeGraphQL.omit(input: true, output: false) company Company? @relation(fields: [companyId], references: [id], onDelete: Cascade) companyId String? /// @TypeGraphQL.omit(input: true, output: false) workspaceMember WorkspaceMember? @relation(fields: [workspaceMemberId], references: [id]) workspaceMemberId String? @@map("favorites") } enum ViewType { Table Pipeline } model View { /// @Validator.IsString() /// @Validator.IsOptional() id String @id @default(uuid()) fields ViewField[] filters ViewFilter[] name String objectId String sorts ViewSort[] type ViewType /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String @@map("views") } enum ViewFilterOperand { Contains DoesNotContain GreaterThan LessThan Is IsNot IsNotNull } model ViewFilter { displayValue String key String name String operand ViewFilterOperand value String view View @relation(fields: [viewId], references: [id], onDelete: Cascade) viewId String /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String @@id([viewId, key]) @@map("viewFilters") } enum ViewSortDirection { asc desc } model ViewSort { direction ViewSortDirection key String name String view View @relation(fields: [viewId], references: [id], onDelete: Cascade) viewId String /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String @@id([viewId, key]) @@map("viewSorts") } model ViewField { index Float isVisible Boolean key String name String objectId String size Int? view View @relation(fields: [viewId], references: [id], onDelete: Cascade) viewId String /// @TypeGraphQL.omit(input: true, output: true) workspace Workspace @relation(fields: [workspaceId], references: [id]) /// @TypeGraphQL.omit(input: true, output: true) workspaceId String @@id([viewId, key]) @@map("viewFields") }