Skip to content

Commit e3fdde6

Browse files
committed
fix: cache already checked ids
Signed-off-by: Uroš Marolt <uros@marolt.me>
1 parent ea932a5 commit e3fdde6

1 file changed

Lines changed: 106 additions & 68 deletions

File tree

  • services/libs/data-access-layer/src/activities

services/libs/data-access-layer/src/activities/sql.ts

Lines changed: 106 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)