diff --git a/src/common/databases/migrations/20240912095804_add_key_for_files_notary/migration.sql b/src/common/databases/migrations/20240912095804_add_key_for_files_notary/migration.sql new file mode 100644 index 00000000..c44e5fda --- /dev/null +++ b/src/common/databases/migrations/20240912095804_add_key_for_files_notary/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "files_notary" ADD COLUMN "key" VARCHAR(255); diff --git a/src/common/databases/schema.prisma b/src/common/databases/schema.prisma index 5007857f..8e58f283 100644 --- a/src/common/databases/schema.prisma +++ b/src/common/databases/schema.prisma @@ -37,7 +37,7 @@ model Contacts { last_name String @db.VarChar(255) email String @db.VarChar(255) phone_number String? @db.VarChar(50) - cell_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) @@ -51,25 +51,25 @@ model 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[] + 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[] - documents_notary DocumentsNotary[] + seats Seats[] + documents_notary DocumentsNotary[] @@map("users") } @@ -80,6 +80,7 @@ model Whitelist { active Boolean @default(true) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt + @@map("whitelist") } @@ -89,6 +90,7 @@ model UserWhitelist { active Boolean @default(true) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt + @@map("user_whitelist") } @@ -117,135 +119,136 @@ model 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) - notes Notes[] + 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) + notes Notes[] documents_notary DocumentsNotary[] + @@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[] + 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) + 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") + 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[] documents_notary DocumentsNotary[] - folder_anchor OfficeFolderAnchors? @relation(fields: [folder_anchor_uid], references: [uid]) - folder_anchor_uid String? @unique @db.VarChar(255) - notes Notes[] + folder_anchor OfficeFolderAnchors? @relation(fields: [folder_anchor_uid], references: [uid]) + folder_anchor_uid String? @unique @db.VarChar(255) + notes Notes[] @@unique([folder_number, office_uid]) @@map("office_folders") } model OfficeFolderAnchors { - uid String @id @unique @default(uuid()) + uid String @id @unique @default(uuid()) - hash_sources String[] - root_hash String @db.VarChar(255) + hash_sources String[] + root_hash String @db.VarChar(255) - blockchain EBlockchainName @default(TEZOS) - status EAnchoringStatus @default(QUEUED) - anchor_nb_try Int @default(0) + 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) + anchored_at DateTime? + tx_id String? @db.VarChar(255) + tx_link String? @db.VarChar(255) + tx_hash String? @db.VarChar(255) - folder OfficeFolders? + folder OfficeFolders? - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt + 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[] - reminders DocumentsReminder[] + 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[] + reminders DocumentsReminder[] @@map("documents") } model DocumentsNotary { - uid String @id @unique @default(uuid()) - folder OfficeFolders @relation(fields: [folder_uid], references: [uid]) - folder_uid String @db.VarChar(255) - depositor Users @relation(fields: [depositor_uid], references: [uid], onDelete: Cascade) - depositor_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - files FilesNotary[] - customer Customers @relation(fields: [customer_uid], references: [uid], onDelete: Cascade) - customer_uid String @db.VarChar(255) - document String @db.VarChar(255) @default("") + uid String @id @unique @default(uuid()) + folder OfficeFolders @relation(fields: [folder_uid], references: [uid]) + folder_uid String @db.VarChar(255) + depositor Users @relation(fields: [depositor_uid], references: [uid], onDelete: Cascade) + depositor_uid String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + files FilesNotary[] + customer Customers @relation(fields: [customer_uid], references: [uid], onDelete: Cascade) + customer_uid String @db.VarChar(255) + document String @default("") @db.VarChar(255) @@map("documents_notary") } model DocumentsReminder { - uid String @id @unique @default(uuid()) - document Documents @relation(fields: [document_uid], references: [uid], onDelete: Cascade) - document_uid String @db.VarChar(255) - reminder_date DateTime - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt + uid String @id @unique @default(uuid()) + document Documents @relation(fields: [document_uid], references: [uid], onDelete: Cascade) + document_uid String @db.VarChar(255) + reminder_date DateTime + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt @@map("documents_reminder") } @@ -280,16 +283,17 @@ model Files { } model FilesNotary { - uid String @id @unique @default(uuid()) - document_notary DocumentsNotary @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 - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt + uid String @id @unique @default(uuid()) + document_notary DocumentsNotary @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 + key String? @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt @@map("files_notary") } @@ -373,8 +377,9 @@ model Rules { updated_at DateTime? @updatedAt role Roles[] @relation("RolesHasRules") office_roles OfficeRoles[] @relation("OfficeRolesHasRules") - namespace String @db.VarChar(255) @default("notary") + namespace String @default("notary") @db.VarChar(255) groups RulesGroups[] @relation("RulesGroupsHasRules") + @@map("rules") } @@ -384,8 +389,9 @@ model RulesGroups { created_at DateTime? @default(now()) updated_at DateTime? @updatedAt rules Rules[] @relation("RulesGroupsHasRules") + @@map("rules_groups") -} +} model Emails { uid String @id @unique @default(uuid()) @@ -426,54 +432,58 @@ model 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 + 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 + 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 + 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") } model Notes { - uid String @id @unique @default(uuid()) - content String @db.VarChar(1000) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - customer Customers @relation(fields: [customer_uid], references: [uid], onDelete: Cascade) - customer_uid String @db.VarChar(255) + uid String @id @unique @default(uuid()) + content String @db.VarChar(1000) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + customer Customers @relation(fields: [customer_uid], references: [uid], onDelete: Cascade) + customer_uid String @db.VarChar(255) folder OfficeFolders @relation(fields: [folder_uid], references: [uid], onDelete: Cascade) - folder_uid String @db.VarChar(255) + folder_uid String @db.VarChar(255) + @@map("notes") } diff --git a/src/common/repositories/FilesNotaryRepository.ts b/src/common/repositories/FilesNotaryRepository.ts index 6f05e843..3319b372 100644 --- a/src/common/repositories/FilesNotaryRepository.ts +++ b/src/common/repositories/FilesNotaryRepository.ts @@ -40,6 +40,7 @@ export default class FilesNotaryRepository extends BaseRepository { mimetype: file.mimetype, hash: file.hash, size: file.size, + key: key, }, }; return this.model.create({ ...createArgs, include: { document_notary: true } }); diff --git a/src/services/common/FilesNotaryService/FilesNotaryService.ts b/src/services/common/FilesNotaryService/FilesNotaryService.ts index 7089a374..cd508b4a 100644 --- a/src/services/common/FilesNotaryService/FilesNotaryService.ts +++ b/src/services/common/FilesNotaryService/FilesNotaryService.ts @@ -61,10 +61,10 @@ export default class FilesNotaryService extends BaseService { */ public async download(uid: string) { const file = await this.filesNotaryRepository.findOneByUid(uid); - if (!file?.uid) return null; + if (!file?.key) return null; const fileResult = await fetch(file.file_path.concat("?pinataGatewayToken=").concat(this.variables.PINATA_GATEWAY_TOKEN)); const fileArrayBuffer = await fileResult.arrayBuffer(); - return { file: file, buffer: await this.cryptoService.decrypt(Buffer.from(fileArrayBuffer), file.uid) }; + return { file: file, buffer: await this.cryptoService.decrypt(Buffer.from(fileArrayBuffer), file.key) }; } /**