diff --git a/backend/src/services/membership-group/membership-group-service.ts b/backend/src/services/membership-group/membership-group-service.ts index 0aedccd15..767daab31 100644 --- a/backend/src/services/membership-group/membership-group-service.ts +++ b/backend/src/services/membership-group/membership-group-service.ts @@ -93,6 +93,7 @@ export const membershipGroupServiceFactory = ({ } const scopeDatabaseFields = factory.getScopeDatabaseFields(dto.scopeData); + await factory.onCreateMembershipGroupGuard(dto); const customInputRoles = data.roles.filter((el) => factory.isCustomRole(el.role)); @@ -112,6 +113,19 @@ export const membershipGroupServiceFactory = ({ const customRolesGroupBySlug = groupBy(customRoles, ({ slug }) => slug); const membership = await membershipGroupDAL.transaction(async (tx) => { + const existingMembership = await membershipGroupDAL.findOne( + { + scope: scopeData.scope, + ...scopeDatabaseFields, + actorGroupId: dto.data.groupId + }, + tx + ); + if (existingMembership) + throw new BadRequestError({ + message: "Group is already a member" + }); + const doc = await membershipGroupDAL.create( { scope: scopeData.scope, diff --git a/backend/src/services/membership-identity/membership-identity-service.ts b/backend/src/services/membership-identity/membership-identity-service.ts index ab63c4508..b1dd6e238 100644 --- a/backend/src/services/membership-identity/membership-identity-service.ts +++ b/backend/src/services/membership-identity/membership-identity-service.ts @@ -105,6 +105,19 @@ export const membershipIdentityServiceFactory = ({ const customRolesGroupBySlug = groupBy(customRoles, ({ slug }) => slug); const membership = await membershipIdentityDAL.transaction(async (tx) => { + const existingMembership = await membershipIdentityDAL.findOne( + { + scope: scopeData.scope, + ...scopeDatabaseFields, + actorIdentityId: dto.data.identityId + }, + tx + ); + if (existingMembership) + throw new BadRequestError({ + message: "Identity is already a member" + }); + const doc = await membershipIdentityDAL.create( { scope: scopeData.scope,