Skip to content

Commit 63710de

Browse files
authored
fix: prevent foreign key violations during entity merges (#3555)
1 parent 494025e commit 63710de

11 files changed

Lines changed: 282 additions & 154 deletions

File tree

backend/src/database/repositories/memberOrganizationRepository.ts

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -47,41 +47,6 @@ class MemberOrganizationRepository {
4747
return results as IMemberOrganization[]
4848
}
4949

50-
static async removeMemberRole(role: IMemberOrganization, options: IRepositoryOptions) {
51-
const seq = SequelizeRepository.getSequelize(options)
52-
const transaction = SequelizeRepository.getTransaction(options)
53-
54-
let deleteMemberRole = `DELETE FROM "memberOrganizations"
55-
WHERE
56-
"organizationId" = :organizationId and
57-
"memberId" = :memberId`
58-
59-
const replacements = {
60-
organizationId: role.organizationId,
61-
memberId: role.memberId,
62-
} as any
63-
64-
if (role.dateStart === null) {
65-
deleteMemberRole += ` and "dateStart" is null `
66-
} else {
67-
deleteMemberRole += ` and "dateStart" = :dateStart `
68-
replacements.dateStart = (role.dateStart as Date).toISOString()
69-
}
70-
71-
if (role.dateEnd === null) {
72-
deleteMemberRole += ` and "dateEnd" is null `
73-
} else {
74-
deleteMemberRole += ` and "dateEnd" = :dateEnd `
75-
replacements.dateEnd = (role.dateEnd as Date).toISOString()
76-
}
77-
78-
await seq.query(deleteMemberRole, {
79-
replacements,
80-
type: QueryTypes.DELETE,
81-
transaction,
82-
})
83-
}
84-
8550
static async findNonIntersectingRoles(
8651
primaryId: string,
8752
secondaryId: string,

backend/src/database/repositories/organizationRepository.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
addOrgsToSegments,
2525
cleanUpOrgIdentities,
2626
cleanupForOganization,
27-
deleteOrgAttributesByOrganizationId,
27+
deleteOrganizationAttributes,
2828
fetchManyOrgIdentities,
2929
fetchManyOrgSegments,
3030
fetchOrgIdentities,
@@ -564,7 +564,7 @@ class OrganizationRepository {
564564

565565
await cleanupForOganization(qx, id)
566566

567-
await deleteOrgAttributesByOrganizationId(qx, id)
567+
await deleteOrganizationAttributes(qx, [id])
568568

569569
await record.destroy({
570570
transaction,

services/apps/entity_merging_worker/src/activities/organizations.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import {
66
} from '@crowd/data-access-layer/src/old/apps/entity_merging_worker/orgs'
77
import {
88
cleanupForOganization,
9-
deleteOrgAttributesByOrganizationId,
9+
deleteOrganizationAttributes,
10+
deleteOrganizationEnrichment,
1011
} from '@crowd/data-access-layer/src/organizations'
1112
import { dbStoreQx, pgpQx } from '@crowd/data-access-layer/src/queryExecutor'
1213
import { SearchSyncApiClient } from '@crowd/opensearch'
@@ -19,7 +20,8 @@ export async function deleteOrganization(organizationId: string): Promise<void>
1920
await deleteOrganizationSegments(svc.postgres.writer, organizationId)
2021

2122
const qx = dbStoreQx(svc.postgres.writer)
22-
await deleteOrgAttributesByOrganizationId(qx, organizationId)
23+
await deleteOrganizationEnrichment(qx, organizationId)
24+
await deleteOrganizationAttributes(qx, [organizationId])
2325
await cleanupForOganization(qx, organizationId)
2426

2527
await deleteOrganizationById(svc.postgres.writer, organizationId)

services/apps/merge_suggestions_worker/src/activities/organizationMergeSuggestions.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,6 @@ export async function getOrganizationMergeSuggestions(
283283
throw e
284284
}
285285

286-
svc.log.debug(`Found ${organizationsToMerge.length} similar organizations!`)
287-
svc.log.debug({ organizationsToMerge })
288-
289286
for (const organizationToMerge of organizationsToMerge) {
290287
const secondaryOrgWithLfxMembership = await hasLfxMembership(qx, {
291288
organizationId: organizationToMerge._source.uuid_organizationId,

services/libs/data-access-layer/src/member_organization_affiliation_overrides/index.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -160,18 +160,3 @@ export async function findPrimaryWorkExperiencesOfMember(
160160
)
161161
return overrides
162162
}
163-
164-
export async function deleteAffiliationOverrides(
165-
qx: QueryExecutor,
166-
memberId: string,
167-
memberOrganizationIds: string[],
168-
): Promise<void> {
169-
await qx.result(
170-
`
171-
DELETE FROM "memberOrganizationAffiliationOverrides"
172-
WHERE "memberId" = $(memberId)
173-
AND "memberOrganizationId" IN ($(memberOrganizationIds:csv))
174-
`,
175-
{ memberId, memberOrganizationIds },
176-
)
177-
}

0 commit comments

Comments
 (0)