@@ -7,6 +7,7 @@ import validator from 'validator'
77import { captureApiChange , memberMergeAction , memberUnmergeAction } from '@crowd/audit-logs'
88import {
99 Error400 ,
10+ Error409 ,
1011 getEarliestValidDate ,
1112 getProperDisplayName ,
1213 isDomainExcluded ,
@@ -23,6 +24,7 @@ import {
2324 queryMembersAdvanced ,
2425 removeMemberTags ,
2526} from '@crowd/data-access-layer/src/members'
27+ import { findMergeAction } from '@crowd/data-access-layer/src/mergeActions/repo'
2628import { QueryExecutor , optionsQx } from '@crowd/data-access-layer/src/queryExecutor'
2729// import { getActivityCountOfMemberIdentities } from '@crowd/data-access-layer'
2830import { fetchManySegments } from '@crowd/data-access-layer/src/segments'
@@ -1204,10 +1206,21 @@ export default class MemberService extends LoggerBase {
12041206 }
12051207 }
12061208
1209+ const qx = SequelizeRepository . getQueryExecutor ( this . options )
1210+
1211+ const mergeAction = await findMergeAction ( qx , originalId , toMergeId )
1212+
1213+ // prevent multiple merge operations
1214+ if (
1215+ mergeAction ?. state === MergeActionState . IN_PROGRESS ||
1216+ mergeAction ?. state === MergeActionState . PENDING
1217+ ) {
1218+ throw new Error409 ( this . options . language , 'merge.errors.multipleMerge' , mergeAction ?. state )
1219+ }
1220+
12071221 let tx
12081222
12091223 const getMemberById = async ( memberId : string ) => {
1210- const qx = SequelizeRepository . getQueryExecutor ( this . options )
12111224 const member = await findMemberById ( qx , memberId , [
12121225 MemberField . ID ,
12131226 MemberField . DISPLAY_NAME ,
@@ -1346,21 +1359,21 @@ export default class MemberService extends LoggerBase {
13461359 currentSegments : secondMemberSegments ,
13471360 } )
13481361
1362+ await MergeActionsRepository . setMergeAction (
1363+ MergeActionType . MEMBER ,
1364+ originalId ,
1365+ toMergeId ,
1366+ repoOptions ,
1367+ {
1368+ step : MergeActionStep . MERGE_SYNC_DONE ,
1369+ } ,
1370+ )
1371+
13491372 await SequelizeRepository . commitTransaction ( tx )
13501373 return { original, toMerge }
13511374 } ) ,
13521375 )
13531376
1354- await MergeActionsRepository . setMergeAction (
1355- MergeActionType . MEMBER ,
1356- originalId ,
1357- toMergeId ,
1358- this . options ,
1359- {
1360- step : MergeActionStep . MERGE_SYNC_DONE ,
1361- } ,
1362- )
1363-
13641377 await this . options . temporal . workflow . start ( 'finishMemberMerging' , {
13651378 taskQueue : 'entity-merging' ,
13661379 workflowId : `finishMemberMerging/${ originalId } /${ toMergeId } ` ,
0 commit comments