// This the Prisma schema file generator client { provider = "prisma-client-js" //binaryTargets = ["native"] } datasource db { provider = "postgresql" url = env("DEV_PRISMA_STUDIO_DB_URL") } // Entités -> snake_case // table -> CamelCase // Models au sein de la Database (Prisma) // Permet d'utiliser du cable_case dans les tables et du SnakeCase dans les models // id String @unique @default(auto()) @map("_id") @db.ObjectId // @map de la table checker le naming avec le tiret model Addresses { uid String @id @unique @default(uuid()) address String @db.VarChar(255) city String @db.VarChar(255) zip_code Int created_at DateTime? @default(now()) updated_at DateTime? @updatedAt contacts Contacts? office Offices? @@map("addresses") } model Contacts { uid String @id @unique @default(uuid()) first_name String @db.VarChar(255) last_name String @db.VarChar(255) email String @unique @db.VarChar(255) phone_number String? @db.VarChar(50) cell_phone_number String @unique @db.VarChar(50) civility ECivility @default(MALE) address Addresses? @relation(fields: [address_uid], references: [uid], onDelete: Cascade) address_uid String? @unique @db.VarChar(255) birthdate DateTime? created_at DateTime? @default(now()) updated_at DateTime? @updatedAt users Users? customers Customers? @@map("contacts") } model Users { uid String @id @unique @default(uuid()) @map("uid") idNot String @unique @db.VarChar(255) contact Contacts @relation(fields: [contact_uid], references: [uid], onDelete: Cascade) contact_uid String @unique @db.VarChar(255) role Roles @relation(fields: [roles_uid], references: [uid], onDelete: Cascade) roles_uid String @db.VarChar(255) office_role OfficeRoles? @relation(fields: [office_role_uid], references: [uid], onDelete: Cascade) office_role_uid String? @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt office_membership Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) office_uid String @db.VarChar(255) notifications Notifications[] @relation("UserHasNotifications") office_folders OfficeFolders[] @relation("OfficeFolderHasStakeholders") @@map("users") } model Offices { uid String @id @unique @default(uuid()) idNot String @unique @db.VarChar(255) name String @db.VarChar(255) crpcen String @unique @db.VarChar(255) address Addresses @relation(fields: [address_uid], references: [uid], onDelete: Cascade) address_uid String @unique @db.VarChar(255) office_status EOfficeStatus @default(DESACTIVATED) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt deed_types DeedTypes[] users Users[] office_folders OfficeFolders[] document_types DocumentTypes[] office_roles OfficeRoles[] @@map("offices") } model Customers { uid String @id @unique @default(uuid()) status ECustomerStatus @default(PENDING) contact Contacts @relation(fields: [contact_uid], references: [uid], onDelete: Cascade) contact_uid String @unique @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt office_folders OfficeFolders[] @relation("OfficeFolderHasCustomers") documents Documents[] @@map("customers") } model Notifications { uid String @id @unique @default(uuid()) message String @db.VarChar(255) redirection_url String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt users Users[] @relation("UserHasNotifications") @@map("notifications") } model OfficeFolders { uid String @id @unique @default(uuid()) folder_number String @db.VarChar(255) name String @db.VarChar(255) description String? @db.VarChar(255) archived_description String? @db.VarChar(255) status EFolderStatus @default(LIVE) deed Deeds @relation(fields: [deed_uid], references: [uid], onDelete: Cascade) deed_uid String @unique @db.VarChar(255) office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) office_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt stakeholders Users[] @relation("OfficeFolderHasStakeholders") customers Customers[] @relation("OfficeFolderHasCustomers") documents Documents[] @@unique([folder_number, office_uid]) @@map("office_folders") } model Documents { uid String @id @unique @default(uuid()) document_status EDocumentStatus @default(ASKED) document_type DocumentTypes @relation(fields: [document_type_uid], references: [uid]) document_type_uid String @db.VarChar(255) blockchain_anchor BlockchainAnchors? @relation(fields: [blockchain_anchor_uid], references: [uid]) blockchain_anchor_uid String? @db.VarChar(255) folder OfficeFolders @relation(fields: [folder_uid], references: [uid]) folder_uid String @db.VarChar(255) depositor Customers @relation(fields: [depositor_uid], references: [uid], onDelete: Cascade) depositor_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt files Files[] document_history DocumentHistory[] @@map("documents") } model DocumentHistory { uid String @id @unique @default(uuid()) document_status EDocumentStatus @default(ASKED) refused_reason String? @db.VarChar(255) document Documents @relation(fields: [document_uid], references: [uid], onDelete: Cascade) document_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@map("document_history") } model Files { uid String @id @unique @default(uuid()) document Documents @relation(fields: [document_uid], references: [uid], onDelete: Cascade) document_uid String @db.VarChar(255) file_path String @unique @db.VarChar(255) file_name String @db.VarChar(255) mimetype String @db.VarChar(255) size Int archived_at DateTime? key String? @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@map("files") } model BlockchainAnchors { uid String @id @unique @default(uuid()) smartSigJobId String @unique @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt documents Documents[] @@map("blockchain_anchors") } model DocumentTypes { uid String @id @unique @default(uuid()) name String @db.VarChar(255) public_description String @db.VarChar(255) private_description String? @db.VarChar(255) office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) office_uid String @db.VarChar(255) archived_at DateTime? created_at DateTime? @default(now()) updated_at DateTime? @updatedAt documents Documents[] deeds Deeds[] @relation("DeedHasDocumentTypes") deed_type DeedTypes[] @relation("DeedTypeHasDocumentTypes") @@unique([name, office_uid]) @@map("document_types") } model Deeds { uid String @id @unique @default(uuid()) deed_type DeedTypes @relation(fields: [deed_type_uid], references: [uid], onDelete: Cascade) deed_type_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt document_types DocumentTypes[] @relation("DeedHasDocumentTypes") office_folder OfficeFolders? @@map("deed") } model DeedTypes { uid String @id @unique @default(uuid()) name String @db.VarChar(255) description String @db.VarChar(255) archived_at DateTime? office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) office_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt deed Deeds[] document_types DocumentTypes[] @relation("DeedTypeHasDocumentTypes") @@unique([name, office_uid]) @@map("deed_types") } model Roles { uid String @id @unique @default(uuid()) name String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt rules Rules[] @relation("RolesHasRules") users Users[] @@map("roles") } model OfficeRoles { uid String @id @unique @default(uuid()) name String @db.VarChar(255) office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) office_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt rules Rules[] @relation("OfficeRolesHasRules") users Users[] @@map("office_roles") } model Rules { uid String @id @unique @default(uuid()) name String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt role Roles[] @relation("RolesHasRules") office_roles OfficeRoles[] @relation("OfficeRolesHasRules") @@map("rules") } model Emails { uid String @id @unique @default(uuid()) templateName String @db.VarChar(255) from String? @db.VarChar(255) to String @db.VarChar(255) subject String @db.VarChar(255) templateVariables Json @default("{}") @db.Json cc String[] @db.VarChar(255) cci String[] @db.VarChar(255) sentAt DateTime? nbTrySend Int? @default(0) lastTrySendDate DateTime? @@map("email") } enum ECivility { MALE FEMALE OTHERS } enum EFolderStatus { LIVE ARCHIVED } enum EOfficeStatus { ACTIVATED DESACTIVATED } enum ENotificationStatus { READ UNREAD } enum ECustomerStatus { VALIDATED PENDING ERRONED } enum EDocumentStatus { ASKED DEPOSITED VALIDATED ANCHORED REFUSED }