@@ -580,6 +580,10 @@ export async function createOrUpdateRelations(
580580 let index = 0
581581
582582 const activityIds = new Set < string > ( )
583+ const checkedMembers = new Map < string , string > ( ) // id -> resolved id (may differ if looked up via identity)
584+ const checkedOrganizations = new Set < string > ( )
585+ const checkedSegments = new Set < string > ( )
586+ const checkedConversations = new Set < string > ( )
583587 const valueList : string [ ] = [ ]
584588 for ( const data of relations ) {
585589 if ( data . username === undefined || data . username === null ) {
@@ -597,132 +601,166 @@ export async function createOrUpdateRelations(
597601 if ( ! skipChecks ) {
598602 // check objectMember exists
599603 if ( data . objectMemberId !== undefined && data . objectMemberId !== null ) {
600- let objectMember = await qe . select (
601- `
604+ if ( checkedMembers . has ( data . objectMemberId ) ) {
605+ data . objectMemberId = checkedMembers . get ( data . objectMemberId )
606+ } else {
607+ let objectMember = await qe . select (
608+ `
602609 SELECT id
603610 FROM members
604611 WHERE id = $(objectMemberId)
605612 ` ,
606- {
607- objectMemberId : data . objectMemberId ,
608- } ,
609- )
613+ {
614+ objectMemberId : data . objectMemberId ,
615+ } ,
616+ )
610617
611- if ( objectMember . length === 0 ) {
612- if ( data . objectMemberUsername && data . platform ) {
613- objectMember = await qe . select (
614- `
618+ if ( objectMember . length === 0 ) {
619+ if ( data . objectMemberUsername && data . platform ) {
620+ objectMember = await qe . select (
621+ `
615622 SELECT "memberId"
616623 FROM "memberIdentities"
617- WHERE value = $(value)
618- and platform = $(platform)
624+ WHERE value = $(value)
625+ and platform = $(platform)
619626 and verified = true
620627 and "deletedAt" is null
621628 limit 1
622629 ` ,
623- {
624- value : data . objectMemberUsername ,
625- platform : data . platform ,
626- } ,
627- )
628-
629- if ( objectMember . length === 0 ) {
630- data . objectMemberId = null
630+ {
631+ value : data . objectMemberUsername ,
632+ platform : data . platform ,
633+ } ,
634+ )
635+
636+ if ( objectMember . length === 0 ) {
637+ checkedMembers . set ( data . objectMemberId , null )
638+ data . objectMemberId = null
639+ } else {
640+ checkedMembers . set ( data . objectMemberId , objectMember [ 0 ] . memberId )
641+ data . objectMemberId = objectMember [ 0 ] . memberId
642+ }
631643 } else {
632- data . objectMemberId = objectMember [ 0 ] . memberId
644+ checkedMembers . set ( data . objectMemberId , null )
645+ data . objectMemberId = null
633646 }
634647 } else {
635- data . objectMemberId = null
648+ checkedMembers . set ( data . objectMemberId , data . objectMemberId )
636649 }
637650 }
638651 }
639652
640653 // check conversation exists
641654 if ( data . conversationId !== undefined && data . conversationId !== null ) {
642- const conversation = await qe . select (
643- `
655+ if ( ! checkedConversations . has ( data . conversationId ) ) {
656+ const conversation = await qe . select (
657+ `
644658 SELECT id
645659 FROM conversations
646660 WHERE id = $(conversationId)
647661 ` ,
648- {
649- conversationId : data . conversationId ,
650- } ,
651- )
662+ {
663+ conversationId : data . conversationId ,
664+ } ,
665+ )
652666
653- if ( conversation . length === 0 ) {
654- data . conversationId = null
667+ if ( conversation . length === 0 ) {
668+ data . conversationId = null
669+ } else {
670+ checkedConversations . add ( data . conversationId )
671+ }
655672 }
656673 }
657674
658675 // check segmentId exists
659- const segment = await qe . select (
660- `
676+ if ( ! checkedSegments . has ( data . segmentId ) ) {
677+ const segment = await qe . select (
678+ `
661679 SELECT id
662680 FROM segments
663681 WHERE id = $(segmentId)
664682 ` ,
665- {
666- segmentId : data . segmentId ,
667- } ,
668- )
683+ {
684+ segmentId : data . segmentId ,
685+ } ,
686+ )
687+
688+ if ( segment . length === 0 ) {
689+ // segment not found, skip adding this activity relation
690+ continue
691+ }
669692
670- if ( segment . length === 0 ) {
671- // segment not found, skip adding this activity relation
672- continue
693+ checkedSegments . add ( data . segmentId )
673694 }
674695
675696 // check member exists
676- let member = await qe . select (
677- `
697+ if ( checkedMembers . has ( data . memberId ) ) {
698+ const resolved = checkedMembers . get ( data . memberId )
699+ if ( resolved === null ) {
700+ // member not found, skip adding this activity relation
701+ continue
702+ }
703+ data . memberId = resolved
704+ } else {
705+ let member = await qe . select (
706+ `
678707 SELECT id
679708 FROM members
680709 WHERE id = $(memberId)
681710 ` ,
682- {
683- memberId : data . memberId ,
684- } ,
685- )
711+ {
712+ memberId : data . memberId ,
713+ } ,
714+ )
686715
687- if ( member . length === 0 ) {
688- // find member using identity
689- member = await qe . select (
690- `
716+ if ( member . length === 0 ) {
717+ // find member using identity
718+ member = await qe . select (
719+ `
691720 SELECT "memberId"
692721 FROM "memberIdentities"
693- WHERE value = $(value)
694- and platform = $(platform)
722+ WHERE value = $(value)
723+ and platform = $(platform)
695724 and verified = true
696725 and "deletedAt" is null
697726 limit 1
698727 ` ,
699- {
700- value : data . username ,
701- platform : data . platform ,
702- } ,
703- )
704- if ( member . length === 0 ) {
705- // member not found, skip adding this activity relation
706- continue
728+ {
729+ value : data . username ,
730+ platform : data . platform ,
731+ } ,
732+ )
733+ if ( member . length === 0 ) {
734+ checkedMembers . set ( data . memberId , null )
735+ // member not found, skip adding this activity relation
736+ continue
737+ } else {
738+ checkedMembers . set ( data . memberId , member [ 0 ] . memberId )
739+ data . memberId = member [ 0 ] . memberId
740+ }
707741 } else {
708- data . memberId = member [ 0 ] . memberId
742+ checkedMembers . set ( data . memberId , data . memberId )
709743 }
710744 }
711745
712746 if ( data . organizationId !== undefined && data . organizationId !== null ) {
713- const organization = await qe . select (
714- `
747+ if ( ! checkedOrganizations . has ( data . organizationId ) ) {
748+ const organization = await qe . select (
749+ `
715750 SELECT id
716751 FROM organizations
717752 WHERE id = $(organizationId)
718753 ` ,
719- {
720- organizationId : data . organizationId ,
721- } ,
722- )
754+ {
755+ organizationId : data . organizationId ,
756+ } ,
757+ )
723758
724- if ( organization . length === 0 ) {
725- data . organizationId = null
759+ if ( organization . length === 0 ) {
760+ data . organizationId = null
761+ } else {
762+ checkedOrganizations . add ( data . organizationId )
763+ }
726764 }
727765 }
728766 }
0 commit comments