From a107b374efb7236799c02e924fbce20f83aac23a Mon Sep 17 00:00:00 2001 From: x032205 Date: Fri, 14 Nov 2025 14:53:02 -0500 Subject: [PATCH 1/2] fix total counts for change requests --- .../secret-approval-request-dal.ts | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts b/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts index 2610d9324..614225bc3 100644 --- a/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts +++ b/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts @@ -354,16 +354,21 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { (tx || db.replicaNode())(TableName.SecretApprovalRequest) .join(TableName.SecretFolder, `${TableName.SecretApprovalRequest}.folderId`, `${TableName.SecretFolder}.id`) .join(TableName.Environment, `${TableName.SecretFolder}.envId`, `${TableName.Environment}.id`) - .join( - TableName.SecretApprovalPolicyApprover, - `${TableName.SecretApprovalRequest}.policyId`, - `${TableName.SecretApprovalPolicyApprover}.policyId` - ) .join( TableName.SecretApprovalPolicy, `${TableName.SecretApprovalRequest}.policyId`, `${TableName.SecretApprovalPolicy}.id` ) + .leftJoin( + TableName.SecretApprovalPolicyApprover, + `${TableName.SecretApprovalPolicy}.id`, + `${TableName.SecretApprovalPolicyApprover}.policyId` + ) + .leftJoin( + TableName.UserGroupMembership, + `${TableName.SecretApprovalPolicyApprover}.approverGroupId`, + `${TableName.UserGroupMembership}.groupId` + ) .where({ projectId }) .where((qb) => { if (policyId) void qb.where(`${TableName.SecretApprovalPolicy}.id`, policyId); @@ -373,10 +378,10 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { void bd .where(`${TableName.SecretApprovalPolicyApprover}.approverUserId`, userId) .orWhere(`${TableName.SecretApprovalRequest}.committerUserId`, userId) + .orWhere(`${TableName.UserGroupMembership}.userId`, userId) ) .select("status", `${TableName.SecretApprovalRequest}.id`) .groupBy(`${TableName.SecretApprovalRequest}.id`, "status") - .count("status") ) .select("status") .from("temp") @@ -499,7 +504,6 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { const query = (tx || db.replicaNode()) .select("*") - .select(db.raw("count(*) OVER() as total_count")) .from(innerQuery) .orderBy("createdAt", "desc") as typeof innerQuery; @@ -519,6 +523,14 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { }); } + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const countResult = await (tx || db.replicaNode()) + .count({ count: "*" }) + .from(query.clone().as("count_query")) + .first(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const totalCount = Number(countResult?.count || 0); + const docs = await (tx || db) .with("w", query) .select("*") @@ -526,9 +538,6 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { .where("w.rank", ">=", offset) .andWhere("w.rank", "<", offset + limit); - // @ts-expect-error knex does not infer - const totalCount = Number(docs[0]?.total_count || 0); - const formattedDoc = sqlNestRelationships({ data: docs, key: "id", @@ -701,6 +710,7 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { db.ref("firstName").withSchema("committerUser").as("committerUserFirstName"), db.ref("lastName").withSchema("committerUser").as("committerUserLastName") ) + .distinctOn(`${TableName.SecretApprovalRequest}.id`) .as("inner"); const query = (tx || db).select("*").from(innerQuery).orderBy("createdAt", "desc") as typeof innerQuery; @@ -721,11 +731,13 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { }); } - const countQuery = (await (tx || db) - .select(db.raw("count(*) OVER() as total_count")) - .from(query.clone().as("outer"))) as Array<{ - total_count: number; - }>; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const countResult = await (tx || db.replicaNode()) + .count({ count: "*" }) + .from(query.clone().as("count_query")) + .first(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const totalCount = Number(countResult?.count || 0); const rankOffset = offset + 1; const docs = await (tx || db) @@ -735,8 +747,6 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { .where("w.rank", ">=", rankOffset) .andWhere("w.rank", "<", rankOffset + limit); - const totalCount = Number(countQuery[0]?.total_count || 0); - const formattedDoc = sqlNestRelationships({ data: docs, key: "id", From a3fa765d7f5e7bcc81bb98d81f69fddfb1b2d2a9 Mon Sep 17 00:00:00 2001 From: x032205 Date: Fri, 14 Nov 2025 20:06:14 -0500 Subject: [PATCH 2/2] revert changes on findByProjectIdBridgeSecretV2 --- .../secret-approval-request-dal.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts b/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts index 614225bc3..9f9b0604c 100644 --- a/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts +++ b/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts @@ -710,7 +710,6 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { db.ref("firstName").withSchema("committerUser").as("committerUserFirstName"), db.ref("lastName").withSchema("committerUser").as("committerUserLastName") ) - .distinctOn(`${TableName.SecretApprovalRequest}.id`) .as("inner"); const query = (tx || db).select("*").from(innerQuery).orderBy("createdAt", "desc") as typeof innerQuery; @@ -731,13 +730,11 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { }); } - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const countResult = await (tx || db.replicaNode()) - .count({ count: "*" }) - .from(query.clone().as("count_query")) - .first(); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const totalCount = Number(countResult?.count || 0); + const countQuery = (await (tx || db) + .select(db.raw("count(*) OVER() as total_count")) + .from(query.clone().as("outer"))) as Array<{ + total_count: number; + }>; const rankOffset = offset + 1; const docs = await (tx || db) @@ -747,6 +744,8 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { .where("w.rank", ">=", rankOffset) .andWhere("w.rank", "<", rankOffset + limit); + const totalCount = Number(countQuery[0]?.total_count || 0); + const formattedDoc = sqlNestRelationships({ data: docs, key: "id",