// 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) 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) user_has_notifications UserHasNotifications[] office_folder_has_stakeholder 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[] @@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_folder_has_customers OfficeFolderHasCustomers[] documents Documents[] @@map("customers") } model UserHasNotifications { uid String @id @unique @default(uuid()) user Users @relation(fields: [user_uid], references: [uid]) user_uid String @db.VarChar(255) notification Notifications @relation(fields: [notification_uid], references: [uid], onDelete: Cascade) notification_uid String @db.VarChar(255) notification_status ENotificationStatus @default(UNREAD) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@unique([notification_uid, user_uid]) @@map("user_has_notifications") } 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 user_has_notifications 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 office_folder_has_customers OfficeFolderHasCustomers[] office_folder_has_stakeholder OfficeFolderHasStakeholders[] documents Documents[] @@unique([folder_number, office_uid]) @@map("office_folders") } model OfficeFolderHasCustomers { uid String @id @unique @default(uuid()) customer Customers @relation(fields: [customer_uid], references: [uid], onDelete: Cascade) customer_uid String @db.VarChar(255) office_folder OfficeFolders @relation(fields: [office_folder_uid], references: [uid], onDelete: Cascade) office_folder_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@unique([office_folder_uid, customer_uid]) @@map("office_folder_has_customers") } model OfficeFolderHasStakeholders { uid String @id @unique @default(uuid()) office_folder OfficeFolders @relation(fields: [office_folder_uid], references: [uid], onDelete: Cascade) office_folder_uid String @db.VarChar(255) user_stakeholder Users @relation(fields: [user_stakeholder_uid], references: [uid], onDelete: Cascade) user_stakeholder_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@unique([office_folder_uid, user_stakeholder_uid]) @@map("office_folder_has_stakeholder") } 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) iv 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[] deed_has_document_types DeedHasDocumentTypes[] deed_type_has_document_types DeedTypeHasDocumentTypes[] @@unique([name, office_uid]) @@map("document_types") } model DeedHasDocumentTypes { uid String @id @unique @default(uuid()) document_type DocumentTypes @relation(fields: [document_type_uid], references: [uid], onDelete: Cascade) document_type_uid String @db.VarChar(255) deed Deeds @relation(fields: [deed_uid], references: [uid], onDelete: Cascade) deed_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@unique([deed_uid, document_type_uid]) @@map("deed_has_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 deed_has_document_types 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[] deed_type_has_document_types DeedTypeHasDocumentTypes[] @@unique([name, office_uid]) @@map("deed_types") } model DeedTypeHasDocumentTypes { uid String @id @unique @default(uuid()) document_type DocumentTypes @relation(fields: [document_type_uid], references: [uid], onDelete: Cascade) document_type_uid String @db.VarChar(255) 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 @@unique([deed_type_uid, document_type_uid]) @@map("deed_type_has_document_types") } 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 }