Fix case for multiple projects messing with the joins

This commit is contained in:
carlosmonastyrski
2025-03-06 17:04:01 -03:00
parent 3ca931acf1
commit 2ee4d68fd0
2 changed files with 38 additions and 13 deletions
@@ -3,23 +3,43 @@ import { Knex } from "knex";
import { TableName } from "@app/db/schemas"; import { TableName } from "@app/db/schemas";
export async function up(knex: Knex): Promise<void> { export async function up(knex: Knex): Promise<void> {
if (!(await knex.schema.hasColumn(TableName.SecretVersionV2, "userActorId"))) { if (await knex.schema.hasTable(TableName.SecretVersionV2)) {
await knex.schema.alterTable(TableName.SecretVersionV2, (t) => { await knex.schema.alterTable(TableName.SecretVersionV2, (t) => {
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.uuid("userActorId");
t.foreign("userActorId").references("id").inTable(TableName.Users); t.foreign("userActorId").references("id").inTable(TableName.Users);
}
if (!hasSecretVersionV2IdentityActorId) {
t.uuid("identityActorId"); t.uuid("identityActorId");
t.foreign("identityActorId").references("id").inTable(TableName.Identity); t.foreign("identityActorId").references("id").inTable(TableName.Identity);
}
if (!hasSecretVersionV2ActorType) {
t.string("actorType"); t.string("actorType");
}
}); });
} }
} }
export async function down(knex: Knex): Promise<void> { export async function down(knex: Knex): Promise<void> {
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) => { await knex.schema.alterTable(TableName.SecretVersionV2, (t) => {
if (hasSecretVersionV2UserActorId) {
t.dropColumn("userActorId"); t.dropColumn("userActorId");
}
if (hasSecretVersionV2IdentityActorId) {
t.dropColumn("identityActorId"); t.dropColumn("identityActorId");
}
if (hasSecretVersionV2ActorType) {
t.dropColumn("actorType"); t.dropColumn("actorType");
}
}); });
} }
} }
@@ -128,7 +128,6 @@ export const secretVersionV2BridgeDALFactory = (db: TDbClient) => {
) => { ) => {
try { try {
const query = (tx || db)(TableName.SecretVersionV2) const query = (tx || db)(TableName.SecretVersionV2)
.where(`${TableName.SecretVersionV2}.secretId`, secretId)
.leftJoin(TableName.Users, `${TableName.Users}.id`, `${TableName.SecretVersionV2}.userActorId`) .leftJoin(TableName.Users, `${TableName.Users}.id`, `${TableName.SecretVersionV2}.userActorId`)
.leftJoin( .leftJoin(
TableName.ProjectMembership, TableName.ProjectMembership,
@@ -136,8 +135,14 @@ export const secretVersionV2BridgeDALFactory = (db: TDbClient) => {
`${TableName.SecretVersionV2}.userActorId` `${TableName.SecretVersionV2}.userActorId`
) )
.leftJoin(TableName.Identity, `${TableName.Identity}.id`, `${TableName.SecretVersionV2}.identityActorId`) .leftJoin(TableName.Identity, `${TableName.Identity}.id`, `${TableName.SecretVersionV2}.identityActorId`)
.where(`${TableName.ProjectMembership}.projectId`, projectId) .where((qb) => {
.orWhereNull(`${TableName.ProjectMembership}.projectId`) 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( .select(
selectAllTableCols(TableName.SecretVersionV2), selectAllTableCols(TableName.SecretVersionV2),
`${TableName.Users}.username as userActorName`, `${TableName.Users}.username as userActorName`,