11/* eslint-disable @typescript-eslint/no-explicit-any */
2+ import uniqBy from 'lodash.uniqby'
3+
24import { addMemberNoMerge } from '@crowd/data-access-layer/src/member_merge'
35import { MemberField , queryMembers } from '@crowd/data-access-layer/src/members'
46import MemberMergeSuggestionsRepository from '@crowd/data-access-layer/src/old/apps/merge_suggestions_worker/memberMergeSuggestions.repo'
@@ -69,7 +71,12 @@ export async function getMemberMergeSuggestions(
6971 ] ,
7072 }
7173
72- if ( fullMember . identities && fullMember . identities . length > 0 ) {
74+ // deduplicate identities, sort verified first
75+ const identities = uniqBy ( fullMember . identities , ( i ) => `${ i . platform } :${ i . value } ` ) . sort (
76+ ( a , b ) => ( a . verified === b . verified ? 0 : a . verified ? - 1 : 1 ) ,
77+ )
78+
79+ if ( identities && identities . length > 0 ) {
7380 // push nested search scaffold for strong identities
7481 identitiesPartialQuery . should . push ( {
7582 nested : {
@@ -85,7 +92,7 @@ export async function getMemberMergeSuggestions(
8592 } )
8693
8794 // prevent processing more than 100 identities because of opensearch limits (maxClauseCount = 1024)
88- for ( const identity of fullMember . identities . slice ( 0 , 100 ) ) {
95+ for ( const identity of identities . slice ( 0 , 75 ) ) {
8996 if ( identity . value && identity . value . length > 0 ) {
9097 // For verified identities (either email or username)
9198 // 1. Exact search the identity in other unverified identities
0 commit comments