From f03a7cc2499c951a487c39b5ffcfaa520ea0fa10 Mon Sep 17 00:00:00 2001 From: carlosmonastyrski Date: Wed, 28 May 2025 08:43:32 -0300 Subject: [PATCH] PIT: add description to folder versioning --- ...36_add-folder-description-to-versioning.ts | 19 +++++++++++++++ .../src/db/schemas/secret-folder-versions.ts | 3 ++- .../secret-snapshot-service.ts | 10 ++++---- .../folder-commit/folder-commit-schemas.ts | 3 ++- .../folder-commit/folder-commit-service.ts | 24 +++++++++++++++---- .../secret-folder/secret-folder-service.ts | 15 ++++++++---- 6 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 backend/src/db/migrations/20250528110936_add-folder-description-to-versioning.ts diff --git a/backend/src/db/migrations/20250528110936_add-folder-description-to-versioning.ts b/backend/src/db/migrations/20250528110936_add-folder-description-to-versioning.ts new file mode 100644 index 000000000..8c1da7ebc --- /dev/null +++ b/backend/src/db/migrations/20250528110936_add-folder-description-to-versioning.ts @@ -0,0 +1,19 @@ +import { Knex } from "knex"; + +import { TableName } from "../schemas"; + +export async function up(knex: Knex): Promise { + if (!(await knex.schema.hasColumn(TableName.SecretFolderVersion, "description"))) { + await knex.schema.alterTable(TableName.SecretFolderVersion, (t) => { + t.string("description").nullable(); + }); + } +} + +export async function down(knex: Knex): Promise { + if (await knex.schema.hasColumn(TableName.SecretFolderVersion, "description")) { + await knex.schema.alterTable(TableName.SecretFolderVersion, (t) => { + t.dropColumn("description"); + }); + } +} diff --git a/backend/src/db/schemas/secret-folder-versions.ts b/backend/src/db/schemas/secret-folder-versions.ts index 8bef6e83f..3d444c566 100644 --- a/backend/src/db/schemas/secret-folder-versions.ts +++ b/backend/src/db/schemas/secret-folder-versions.ts @@ -14,7 +14,8 @@ export const SecretFolderVersionsSchema = z.object({ createdAt: z.date(), updatedAt: z.date(), envId: z.string().uuid(), - folderId: z.string().uuid() + folderId: z.string().uuid(), + description: z.string().nullable().optional() }); export type TSecretFolderVersions = z.infer; diff --git a/backend/src/ee/services/secret-snapshot/secret-snapshot-service.ts b/backend/src/ee/services/secret-snapshot/secret-snapshot-service.ts index 6321f6054..8cae3dfb5 100644 --- a/backend/src/ee/services/secret-snapshot/secret-snapshot-service.ts +++ b/backend/src/ee/services/secret-snapshot/secret-snapshot-service.ts @@ -532,11 +532,12 @@ export const secretSnapshotServiceFactory = ({ }); await secretTagDAL.saveTagsToSecretV2(secretTagsToBeInsert, tx); const folderVersions = await folderVersionDAL.insertMany( - folders.map(({ version, name, id, envId }) => ({ + folders.map(({ version, name, id, envId, description }) => ({ name, version, folderId: id, - envId + envId, + description })), tx ); @@ -743,11 +744,12 @@ export const secretSnapshotServiceFactory = ({ }); await secretTagDAL.saveTagsToSecret(secretTagsToBeInsert, tx); const folderVersions = await folderVersionDAL.insertMany( - folders.map(({ version, name, id, envId }) => ({ + folders.map(({ version, name, id, envId, description }) => ({ name, version, folderId: id, - envId + envId, + description })), tx ); diff --git a/backend/src/services/folder-commit/folder-commit-schemas.ts b/backend/src/services/folder-commit/folder-commit-schemas.ts index 1318274e3..918e2a56e 100644 --- a/backend/src/services/folder-commit/folder-commit-schemas.ts +++ b/backend/src/services/folder-commit/folder-commit-schemas.ts @@ -37,7 +37,8 @@ const secretVersionSchema = z.object({ // Folder-specific versions schema const folderVersionSchema = z.object({ version: z.string().optional(), - name: z.string().optional() + name: z.string().optional(), + description: z.string().optional().nullable() }); // Secret commit change schema diff --git a/backend/src/services/folder-commit/folder-commit-service.ts b/backend/src/services/folder-commit/folder-commit-service.ts index 628b4cd7a..22a42ad47 100644 --- a/backend/src/services/folder-commit/folder-commit-service.ts +++ b/backend/src/services/folder-commit/folder-commit-service.ts @@ -115,6 +115,7 @@ type FolderChange = BaseChange & { folderVersion: string; versions?: { name: string; + description?: string | null; }[]; }; @@ -604,8 +605,19 @@ export const folderCommitServiceFactory = ({ version: [Number(change.folderVersion), Number(change.fromVersion)] } }); - const versionsShaped = [...new Set(versions.map((version) => version.name))]; - if (versionsShaped.length === 1) { + const versionsShaped = versions.map((version) => ({ + name: version.name, + description: version.description + })); + const uniqueVersions = versionsShaped.filter( + (item, index, arr) => + arr.findIndex((other) => + Object.entries(item).every( + ([key, value]) => JSON.stringify(value) === JSON.stringify(other[key as keyof typeof other]) + ) + ) === index + ); + if (uniqueVersions.length === 1) { removeNoChangeUpdate.push(change.id); } } else if (change.type === ResourceType.SECRET && change.secretVersion && change.fromVersion) { @@ -1108,7 +1120,8 @@ export const folderCommitServiceFactory = ({ parentId: folderId, envId: folderVersion.envId, version: (folderVersion.version || 1) + 1, - name: folderVersion.name + name: folderVersion.name, + description: folderVersion.description }; await folderDAL.create(newFolder, tx); @@ -1117,6 +1130,7 @@ export const folderCommitServiceFactory = ({ folderId: change.id, version: (folderVersion.version || 1) + 1, name: folderVersion.name, + description: folderVersion.description, envId: folderVersion.envId }, tx @@ -1170,7 +1184,8 @@ export const folderCommitServiceFactory = ({ parentId: folderId, envId: versionDetails.envId, version: (versionDetails.version || 1) + 1, - name: versionDetails.name + name: versionDetails.name, + description: versionDetails.description }, tx ); @@ -1180,6 +1195,7 @@ export const folderCommitServiceFactory = ({ folderId: change.id, version: (versionDetails.version || 1) + 1, name: versionDetails.name, + description: versionDetails.description, envId: versionDetails.envId }, tx diff --git a/backend/src/services/secret-folder/secret-folder-service.ts b/backend/src/services/secret-folder/secret-folder-service.ts index a93e4717f..5722734f8 100644 --- a/backend/src/services/secret-folder/secret-folder-service.ts +++ b/backend/src/services/secret-folder/secret-folder-service.ts @@ -119,7 +119,8 @@ export const secretFolderServiceFactory = ({ name: doc.name, envId: doc.envId, version: doc.version, - folderId: doc.id + folderId: doc.id, + description: doc.description })), tx ); @@ -152,7 +153,8 @@ export const secretFolderServiceFactory = ({ name: doc.name, envId: doc.envId, version: doc.version, - folderId: doc.id + folderId: doc.id, + description: doc.description }, tx ); @@ -269,7 +271,8 @@ export const secretFolderServiceFactory = ({ name: doc.name, envId: doc.envId, version: doc.version, - folderId: doc.id + folderId: doc.id, + description: doc.description }, tx ); @@ -385,7 +388,8 @@ export const secretFolderServiceFactory = ({ name: doc.name, envId: doc.envId, version: doc.version, - folderId: doc.id + folderId: doc.id, + description: doc.description }, tx ); @@ -802,7 +806,8 @@ export const secretFolderServiceFactory = ({ }); return versions.map((v) => ({ version: v.version?.toString() || "1", - name: v.name + name: v.name, + description: v.description })); };