Add project permission cache

This commit is contained in:
Carlos Monastyrski
2025-09-23 17:15:54 -03:00
parent 362abc44d6
commit 4eee40c2a3
12 changed files with 345 additions and 30 deletions
@@ -35,7 +35,13 @@ type TIdentityProjectServiceFactoryDep = {
projectDAL: Pick<TProjectDALFactory, "findById">;
projectRoleDAL: Pick<TProjectRoleDALFactory, "find">;
identityOrgMembershipDAL: Pick<TIdentityOrgDALFactory, "findOne">;
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission" | "getProjectPermissionByRole">;
permissionService: Pick<
TPermissionServiceFactory,
| "getProjectPermission"
| "getProjectPermissionByRole"
| "invalidateIdentityProjectPermissionCache"
| "invalidateProjectPermissionCache"
>;
};
export type TIdentityProjectServiceFactory = ReturnType<typeof identityProjectServiceFactory>;
@@ -165,6 +171,12 @@ export const identityProjectServiceFactory = ({
const identityRoles = await identityProjectMembershipRoleDAL.insertMany(sanitizedProjectMembershipRoles, tx);
return { ...identityProjectMembership, roles: identityRoles };
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
permissionService.invalidateIdentityProjectPermissionCache(identityId)
]);
return projectIdentity;
};
@@ -272,6 +284,11 @@ export const identityProjectServiceFactory = ({
return identityProjectMembershipRoleDAL.insertMany(sanitizedProjectMembershipRoles, tx);
});
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
permissionService.invalidateIdentityProjectPermissionCache(identityId)
]);
return updatedRoles;
};
@@ -302,6 +319,12 @@ export const identityProjectServiceFactory = ({
);
const [deletedIdentity] = await identityProjectDAL.delete({ identityId, projectId });
await Promise.allSettled([
permissionService.invalidateProjectPermissionCache(projectId),
permissionService.invalidateIdentityProjectPermissionCache(identityId)
]);
return deletedIdentity;
};