From 56f8245cf3810ee2e659e6c708e5fbb0ef7c62db Mon Sep 17 00:00:00 2001 From: = Date: Fri, 21 Nov 2025 01:58:53 +0530 Subject: [PATCH] fix: resolved duplicate membership in identity --- .../membership-group/membership-group-service.ts | 10 ++++++++++ .../membership-identity/membership-identity-service.ts | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/backend/src/services/membership-group/membership-group-service.ts b/backend/src/services/membership-group/membership-group-service.ts index 0aedccd15..509bd9ff3 100644 --- a/backend/src/services/membership-group/membership-group-service.ts +++ b/backend/src/services/membership-group/membership-group-service.ts @@ -93,6 +93,16 @@ export const membershipGroupServiceFactory = ({ } const scopeDatabaseFields = factory.getScopeDatabaseFields(dto.scopeData); + const existingMembership = await membershipGroupDAL.findOne({ + scope: scopeData.scope, + ...scopeDatabaseFields, + actorGroupId: dto.data.groupId + }); + if (existingMembership) + throw new BadRequestError({ + message: "Group is already a member" + }); + await factory.onCreateMembershipGroupGuard(dto); const customInputRoles = data.roles.filter((el) => factory.isCustomRole(el.role)); diff --git a/backend/src/services/membership-identity/membership-identity-service.ts b/backend/src/services/membership-identity/membership-identity-service.ts index ab63c4508..841c73bd7 100644 --- a/backend/src/services/membership-identity/membership-identity-service.ts +++ b/backend/src/services/membership-identity/membership-identity-service.ts @@ -102,6 +102,16 @@ export const membershipIdentityServiceFactory = ({ throw new NotFoundError({ message: "One or more custom roles not found" }); } + const existingMembership = await membershipIdentityDAL.findOne({ + scope: scopeData.scope, + ...scopeDatabaseFields, + actorIdentityId: dto.data.identityId + }); + if (existingMembership) + throw new BadRequestError({ + message: "Identity is already a member" + }); + const customRolesGroupBySlug = groupBy(customRoles, ({ slug }) => slug); const membership = await membershipIdentityDAL.transaction(async (tx) => {