diff --git a/backend/src/db/migrations/20250305131152_add-actor-id-to-secret-versions-v2.ts b/backend/src/db/migrations/20250305131152_add-actor-id-to-secret-versions-v2.ts index af1e2c85a..eb1046f04 100644 --- a/backend/src/db/migrations/20250305131152_add-actor-id-to-secret-versions-v2.ts +++ b/backend/src/db/migrations/20250305131152_add-actor-id-to-secret-versions-v2.ts @@ -3,23 +3,43 @@ import { Knex } from "knex"; import { TableName } from "@app/db/schemas"; export async function up(knex: Knex): Promise { - if (!(await knex.schema.hasColumn(TableName.SecretVersionV2, "userActorId"))) { + if (await knex.schema.hasTable(TableName.SecretVersionV2)) { await knex.schema.alterTable(TableName.SecretVersionV2, (t) => { - t.uuid("userActorId"); - t.foreign("userActorId").references("id").inTable(TableName.Users); - t.uuid("identityActorId"); - t.foreign("identityActorId").references("id").inTable(TableName.Identity); - t.string("actorType"); + const hasSecretVersionV2UserActorId = await knex.schema.hasColumn(TableName.SecretVersionV2, "userActorId"); + const hasSecretVersionV2IdentityActorId = await knex.schema.hasColumn(TableName.SecretVersionV2, "identityActorId"); + const hasSecretVersionV2ActorType = await knex.schema.hasColumn(TableName.SecretVersionV2, "actorType"); + + if (!hasSecretVersionV2UserActorId) { + t.uuid("userActorId"); + t.foreign("userActorId").references("id").inTable(TableName.Users); + } + if (!hasSecretVersionV2IdentityActorId) { + t.uuid("identityActorId"); + t.foreign("identityActorId").references("id").inTable(TableName.Identity); + } + if (!hasSecretVersionV2ActorType) { + t.string("actorType"); + } }); } } export async function down(knex: Knex): Promise { - if (await knex.schema.hasColumn(TableName.SecretVersionV2, "userActorId")) { + if (await knex.schema.hasTable(TableName.SecretVersionV2)) { + const hasSecretVersionV2UserActorId = await knex.schema.hasColumn(TableName.SecretVersionV2, "userActorId"); + const hasSecretVersionV2IdentityActorId = await knex.schema.hasColumn(TableName.SecretVersionV2, "identityActorId"); + const hasSecretVersionV2ActorType = await knex.schema.hasColumn(TableName.SecretVersionV2, "actorType"); + await knex.schema.alterTable(TableName.SecretVersionV2, (t) => { - t.dropColumn("userActorId"); - t.dropColumn("identityActorId"); - t.dropColumn("actorType"); + if (hasSecretVersionV2UserActorId) { + t.dropColumn("userActorId"); + } + if (hasSecretVersionV2IdentityActorId) { + t.dropColumn("identityActorId"); + } + if (hasSecretVersionV2ActorType) { + t.dropColumn("actorType"); + } }); } } diff --git a/backend/src/services/secret-v2-bridge/secret-version-dal.ts b/backend/src/services/secret-v2-bridge/secret-version-dal.ts index 4eff51a0f..d06aa1472 100644 --- a/backend/src/services/secret-v2-bridge/secret-version-dal.ts +++ b/backend/src/services/secret-v2-bridge/secret-version-dal.ts @@ -128,7 +128,6 @@ export const secretVersionV2BridgeDALFactory = (db: TDbClient) => { ) => { try { const query = (tx || db)(TableName.SecretVersionV2) - .where(`${TableName.SecretVersionV2}.secretId`, secretId) .leftJoin(TableName.Users, `${TableName.Users}.id`, `${TableName.SecretVersionV2}.userActorId`) .leftJoin( TableName.ProjectMembership, @@ -136,8 +135,14 @@ export const secretVersionV2BridgeDALFactory = (db: TDbClient) => { `${TableName.SecretVersionV2}.userActorId` ) .leftJoin(TableName.Identity, `${TableName.Identity}.id`, `${TableName.SecretVersionV2}.identityActorId`) - .where(`${TableName.ProjectMembership}.projectId`, projectId) - .orWhereNull(`${TableName.ProjectMembership}.projectId`) + .where((qb) => { + void qb.where(`${TableName.SecretVersionV2}.secretId`, secretId); + void qb.where(`${TableName.ProjectMembership}.projectId`, projectId); + }) + .orWhere((qb) => { + void qb.where(`${TableName.SecretVersionV2}.secretId`, secretId); + void qb.whereNull(`${TableName.ProjectMembership}.projectId`); + }) .select( selectAllTableCols(TableName.SecretVersionV2), `${TableName.Users}.username as userActorName`,