// This the Prisma schema file generator client { provider = "prisma-client-js" //binaryTargets = ["native"] } datasource db { provider = "postgresql" url = env("DEV_PRISMA_STUDIO_DB_URL") shadowDatabaseUrl = env("DEV_PRISMA_STUDIO_SHADOW_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(1000) 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 @db.VarChar(255) phone_number String? @db.VarChar(50) cell_phone_number String? @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 checked_at DateTime? office_membership Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) office_uid String @db.VarChar(255) office_folders OfficeFolders[] @relation("OfficeFolderHasStakeholders") appointment Appointments[] votes Votes[] user_notifications UserNotifications[] seats Seats[] @@map("users") } model Whitelist { uid String @id @unique @default(uuid()) email String @unique @db.VarChar(255) active Boolean @default(true) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@map("whitelist") } model UserWhitelist { uid String @id @unique @default(uuid()) idNot String @unique @db.VarChar(255) active Boolean @default(true) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@map("user_whitelist") } 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 checked_at DateTime? rib_url String? @db.VarChar(255) rib_name String? @db.VarChar(255) deed_types DeedTypes[] users Users[] office_folders OfficeFolders[] document_types DocumentTypes[] office_roles OfficeRoles[] subscriptions Subscriptions[] customers Customers[] @@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[] password String? @db.VarChar(255) totpCodes TotpCodes[] office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) office_uid String @db.VarChar(255) @@map("customers") } model Notifications { uid String @id @unique @default(uuid()) message String @db.VarChar(1000) redirection_url String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt userNotifications UserNotifications[] @@map("notifications") } model UserNotifications { uid String @id @unique @default(uuid()) user Users @relation(fields: [user_uid], references: [uid], onDelete: Cascade) user_uid String @db.VarChar(255) read Boolean @default(false) notification Notifications @relation(fields: [notification_uid], references: [uid], onDelete: Cascade) notification_uid String @db.VarChar(255) @@map("user_notifications") } model OfficeFolders { uid String @id @unique @default(uuid()) folder_number String @db.VarChar(255) name String @db.VarChar(255) description String? @db.VarChar(1000) 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[] folder_anchor OfficeFolderAnchors? @relation(fields: [folder_anchor_uid], references: [uid]) folder_anchor_uid String? @unique @db.VarChar(255) @@unique([folder_number, office_uid]) @@map("office_folders") } model OfficeFolderAnchors { uid String @id @unique @default(uuid()) hash_sources String[] root_hash String @db.VarChar(255) blockchain EBlockchainName @default(TEZOS) status EAnchoringStatus @default(QUEUED) anchor_nb_try Int @default(0) anchored_at DateTime? tx_id String? @db.VarChar(255) tx_link String? @db.VarChar(255) tx_hash String? @db.VarChar(255) folder OfficeFolders? created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@map("office_folder_anchors") } 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) 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(1000) 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) hash 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 DocumentTypes { uid String @id @unique @default(uuid()) name String @db.VarChar(255) public_description String @db.VarChar(1000) private_description String? @db.VarChar(1000) 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(1000) 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) label 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) label String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt role Roles[] @relation("RolesHasRules") office_roles OfficeRoles[] @relation("OfficeRolesHasRules") namespace String @db.VarChar(255) @default("notary") groups RulesGroups[] @relation("RulesGroupsHasRules") @@map("rules") } model RulesGroups { uid String @id @unique @default(uuid()) name String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt rules Rules[] @relation("RulesGroupsHasRules") @@map("rules_groups") } 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") } model Appointments { uid String @id @unique @default(uuid()) user Users @relation(fields: [user_uid], references: [uid], onDelete: Cascade) user_uid String @db.VarChar(255) choice EVote @default(NOMINATE) status EAppointmentStatus @default(OPEN) votes Votes[] @@unique([user_uid, choice, status]) @@map("appointments") } model Votes { uid String @id @unique @default(uuid()) appointment Appointments @relation(fields: [appointment_uid], references: [uid], onDelete: Cascade) appointment_uid String @db.VarChar(255) voter Users @relation(fields: [voter_uid], references: [uid]) voter_uid String @db.VarChar(255) @@map("votes") } model TotpCodes { uid String @id @unique @default(uuid()) customer Customers @relation(fields: [customer_uid], references: [uid], onDelete: Cascade) customer_uid String @db.VarChar(255) code String @db.VarChar(255) reason TotpCodesReasons @default(LOGIN) resent Boolean @default(false) expire_at DateTime? @default(now()) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@map("totp_codes") } model Subscriptions { uid String @id @unique @default(uuid()) type ESubscriptionType status ESubscriptionStatus @default(ACTIVE) stripe_subscription_id String @db.VarChar(255) start_date DateTime @default(now()) end_date DateTime nb_seats Int office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) office_uid String @db.VarChar(255) seats Seats[] created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@map("subscriptions") } model Seats { uid String @id @unique @default(uuid()) subscription Subscriptions @relation(fields: [subscription_uid], references: [uid], onDelete: Cascade) subscription_uid String @db.VarChar(255) user Users @relation(fields: [user_uid], references: [uid], onDelete: Cascade) user_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt @@map("seats") } enum ESubscriptionStatus { ACTIVE INACTIVE } enum ESubscriptionType { STANDARD UNLIMITED } enum TotpCodesReasons { LOGIN RESET_PASSWORD FIRST_LOGIN } 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 REFUSED } enum EVote { NOMINATE DISMISS } enum EAppointmentStatus { OPEN CLOSED } enum EBlockchainName { TEZOS } enum EAnchoringStatus { QUEUED ATTEMPTING VERIFIED_ON_CHAIN VERIFYING_ON_CHAIN ABANDONED }