Skip to content

Commit 9209301

Browse files
committed
fix: include row updates and enforce bidirectional uniqueness
1 parent d06e644 commit 9209301

2 files changed

Lines changed: 81 additions & 30 deletions

File tree

services/libs/data-access-layer/src/old/apps/merge_suggestions_worker/memberMergeSuggestions.repo.ts

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -151,22 +151,48 @@ class MemberMergeSuggestionsRepository {
151151
replacements = { ...replacements, ...chunkReplacements }
152152
})
153153

154-
const query = `
155-
insert into "${table}" ("memberId", "toMergeId", "similarity", "activityEstimate", "createdAt", "updatedAt")
156-
select new_vals.*
157-
from (
158-
values
159-
${placeholders.join(', ')}
160-
) AS new_vals ("memberId", "toMergeId", "similarity", "activityEstimate", "createdAt", "updatedAt")
161-
where not exists (
162-
select 1
163-
from "${table}"
164-
where ("memberId" = new_vals."memberId"::uuid AND "toMergeId" = new_vals."toMergeId"::uuid)
165-
or ("memberId" = new_vals."toMergeId"::uuid AND "toMergeId" = new_vals."memberId"::uuid)
166-
);
167-
`
168154
try {
169-
await this.connection.any(query, replacements)
155+
// 1. Update existing rows if they already exist
156+
await this.connection.none(
157+
`
158+
update "${table}" t
159+
set
160+
similarity = v.similarity,
161+
"activityEstimate" = v."activityEstimate",
162+
"updatedAt" = now()
163+
from (
164+
values
165+
${placeholders.join(', ')}
166+
) as v("memberId", "toMergeId", "similarity", "activityEstimate", "createdAt", "updatedAt")
167+
where
168+
(t."memberId" = v."memberId"::uuid and t."toMergeId" = v."toMergeId"::uuid)
169+
or
170+
(t."memberId" = v."toMergeId"::uuid and t."toMergeId" = v."memberId"::uuid);
171+
`,
172+
replacements,
173+
)
174+
175+
// 2. Insert only new rows and enforce bidirectional uniqueness
176+
await this.connection.none(
177+
`
178+
insert into "${table}"
179+
("memberId", "toMergeId", "similarity", "activityEstimate", "createdAt", "updatedAt")
180+
select v.*
181+
from (
182+
values
183+
${placeholders.join(', ')}
184+
) as v("memberId", "toMergeId", "similarity", "activityEstimate", "createdAt", "updatedAt")
185+
where not exists (
186+
select 1
187+
from "${table}" t
188+
where
189+
(t."memberId" = v."memberId"::uuid and t."toMergeId" = v."toMergeId"::uuid)
190+
or
191+
(t."memberId" = v."toMergeId"::uuid and t."toMergeId" = v."memberId"::uuid)
192+
);
193+
`,
194+
replacements,
195+
)
170196
} catch (error) {
171197
this.log.error('Error adding members to merge', error)
172198
throw error

services/libs/data-access-layer/src/old/apps/merge_suggestions_worker/organizationMergeSuggestions.repo.ts

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -146,22 +146,47 @@ class OrganizationMergeSuggestionsRepository {
146146
replacements = { ...replacements, ...chunkReplacements }
147147
})
148148

149-
const query = `
150-
insert into "${table}" ("organizationId", "toMergeId", "similarity", "createdAt", "updatedAt")
151-
select new_vals.*
152-
from (
153-
values
154-
${placeholders.join(', ')}
155-
) AS new_vals ("organizationId", "toMergeId", "similarity", "createdAt", "updatedAt")
156-
where not exists (
157-
select 1
158-
from "${table}"
159-
where ("organizationId" = new_vals."organizationId"::uuid AND "toMergeId" = new_vals."toMergeId"::uuid)
160-
or ("organizationId" = new_vals."toMergeId"::uuid AND "toMergeId" = new_vals."organizationId"::uuid)
161-
);
162-
`
163149
try {
164-
await this.connection.any(query, replacements)
150+
// 1. Update existing rows if they already exist
151+
await this.connection.none(
152+
`
153+
update "${table}" t
154+
set
155+
similarity = v.similarity,
156+
"updatedAt" = now()
157+
from (
158+
values
159+
${placeholders.join(', ')}
160+
) as v("organizationId", "toMergeId", "similarity", "createdAt", "updatedAt")
161+
where
162+
(t."organizationId" = v."organizationId"::uuid and t."toMergeId" = v."toMergeId"::uuid)
163+
or
164+
(t."organizationId" = v."toMergeId"::uuid and t."toMergeId" = v."organizationId"::uuid);
165+
`,
166+
replacements,
167+
)
168+
169+
// 2. insert only new rows and enforce bidirectional uniqueness
170+
await this.connection.none(
171+
`
172+
insert into "${table}"
173+
("organizationId", "toMergeId", "similarity", "createdAt", "updatedAt")
174+
select v.*
175+
from (
176+
values
177+
${placeholders.join(', ')}
178+
) as v("organizationId", "toMergeId", "similarity", "createdAt", "updatedAt")
179+
where not exists (
180+
select 1
181+
from "${table}" t
182+
where
183+
(t."organizationId" = v."organizationId"::uuid and t."toMergeId" = v."toMergeId"::uuid)
184+
or
185+
(t."organizationId" = v."toMergeId"::uuid and t."toMergeId" = v."organizationId"::uuid)
186+
);
187+
`,
188+
replacements,
189+
)
165190
} catch (error) {
166191
this.log.error('Error adding organizations to merge', error)
167192
throw error

0 commit comments

Comments
 (0)