2024-03-29 15:04:02 +01:00

474 lines
16 KiB
Plaintext

// 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[]
@@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[]
@@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")
@@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")
}
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[]
@@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)
@@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
}