430 lines
14 KiB
Plaintext
430 lines
14 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[]
|
|
|
|
@@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 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[]
|
|
|
|
@@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")
|
|
}
|
|
|
|
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
|
|
}
|