Add access approval requests to project permission cache logic

This commit is contained in:
Carlos Monastyrski
2025-09-26 17:50:14 -03:00
parent a0dc051f6b
commit 2374182f75
10 changed files with 36 additions and 160 deletions
@@ -45,10 +45,7 @@ type TGroupProjectServiceFactoryDep = {
groupDAL: Pick<TGroupDALFactory, "findOne" | "findAllGroupPossibleMembers">;
permissionService: Pick<
TPermissionServiceFactory,
| "getProjectPermission"
| "getProjectPermissionByRole"
| "invalidateProjectPermissionCache"
| "invalidateUserProjectPermissionCache"
"getProjectPermission" | "getProjectPermissionByRole" | "invalidateProjectPermissionCache"
>;
};
@@ -269,11 +266,7 @@ export const groupProjectServiceFactory = ({
return groupProjectMembership;
});
const groupMembers = await userGroupMembershipDAL.find({ groupId: group.id });
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
...groupMembers.map((member) => permissionService.invalidateUserProjectPermissionCache(member.userId))
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return projectGroup;
};
@@ -384,11 +377,7 @@ export const groupProjectServiceFactory = ({
return groupProjectMembershipRoleDAL.insertMany(sanitizedProjectMembershipRoles, tx);
});
const groupMembers = await userGroupMembershipDAL.find({ groupId });
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
...groupMembers.map((member) => permissionService.invalidateUserProjectPermissionCache(member.userId))
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return updatedRoles;
};
@@ -421,8 +410,6 @@ export const groupProjectServiceFactory = ({
});
ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionGroupActions.Delete, ProjectPermissionSub.Groups);
const groupMembers = await userGroupMembershipDAL.find({ groupId: group.id });
const deletedProjectGroup = await groupProjectDAL.transaction(async (tx) => {
const groupMembersNotInProject = await userGroupMembershipDAL.findGroupMembersNotInProject(
group.id,
@@ -446,10 +433,7 @@ export const groupProjectServiceFactory = ({
return projectGroup;
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
...groupMembers.map((member) => permissionService.invalidateUserProjectPermissionCache(member.userId))
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return deletedProjectGroup;
};
@@ -37,10 +37,7 @@ type TIdentityProjectServiceFactoryDep = {
identityOrgMembershipDAL: Pick<TIdentityOrgDALFactory, "findOne">;
permissionService: Pick<
TPermissionServiceFactory,
| "getProjectPermission"
| "getProjectPermissionByRole"
| "invalidateIdentityProjectPermissionCache"
| "invalidateProjectPermissionCache"
"getProjectPermission" | "getProjectPermissionByRole" | "invalidateProjectPermissionCache"
>;
};
@@ -172,10 +169,7 @@ export const identityProjectServiceFactory = ({
return { ...identityProjectMembership, roles: identityRoles };
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
permissionService.invalidateIdentityProjectPermissionCache(identityId)
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return projectIdentity;
};
@@ -284,10 +278,7 @@ export const identityProjectServiceFactory = ({
return identityProjectMembershipRoleDAL.insertMany(sanitizedProjectMembershipRoles, tx);
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
permissionService.invalidateIdentityProjectPermissionCache(identityId)
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return updatedRoles;
};
@@ -320,10 +311,7 @@ export const identityProjectServiceFactory = ({
const [deletedIdentity] = await identityProjectDAL.delete({ identityId, projectId });
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
permissionService.invalidateIdentityProjectPermissionCache(identityId)
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return deletedIdentity;
};
@@ -45,10 +45,7 @@ import { TProjectUserMembershipRoleDALFactory } from "./project-user-membership-
type TProjectMembershipServiceFactoryDep = {
permissionService: Pick<
TPermissionServiceFactory,
| "getProjectPermission"
| "getProjectPermissionByRole"
| "invalidateUserProjectPermissionCache"
| "invalidateProjectPermissionCache"
"getProjectPermission" | "getProjectPermissionByRole" | "invalidateProjectPermissionCache"
>;
smtpService: TSmtpService;
projectBotDAL: TProjectBotDALFactory;
@@ -245,12 +242,7 @@ export const projectMembershipServiceFactory = ({
);
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
...orgMembers.map(({ userId }) =>
userId ? permissionService.invalidateUserProjectPermissionCache(userId) : Promise.resolve()
)
]);
await permissionService.invalidateProjectPermissionCache(projectId);
if (sendEmails) {
await notificationService.createUserNotifications(
@@ -384,12 +376,7 @@ export const projectMembershipServiceFactory = ({
return projectUserMembershipRoleDAL.insertMany(sanitizedProjectMembershipRoles, tx);
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
membershipUser?.userId
? permissionService.invalidateUserProjectPermissionCache(membershipUser.userId)
: Promise.resolve()
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return updatedRoles;
};
@@ -435,10 +422,7 @@ export const projectMembershipServiceFactory = ({
return deletedMembership;
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
membership.userId ? permissionService.invalidateUserProjectPermissionCache(membership.userId) : Promise.resolve()
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return membership;
};
@@ -542,12 +526,7 @@ export const projectMembershipServiceFactory = ({
return deletedMemberships;
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
...memberships.map(({ userId }) =>
userId ? permissionService.invalidateUserProjectPermissionCache(userId) : Promise.resolve()
)
]);
await permissionService.invalidateProjectPermissionCache(projectId);
return memberships;
};