Skip to content

Commit 4f9abf6

Browse files
authored
fix: handle member identity unique constraint conflicts (#4066)
1 parent 208861b commit 4f9abf6

1 file changed

Lines changed: 23 additions & 26 deletions

File tree

backend/src/api/public/v1/members/identities/createMemberIdentity.ts

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { captureApiChange, memberEditIdentitiesAction } from '@crowd/audit-logs'
55
import { ConflictError, NotFoundError } from '@crowd/common'
66
import {
77
MemberField,
8-
checkMemberIdentityExistence,
98
findMemberById,
109
createMemberIdentity as insertMemberIdentity,
1110
optionsQx,
@@ -53,37 +52,35 @@ export async function createMemberIdentity(req: Request, res: Response): Promise
5352
captureOldState({})
5453

5554
await qx.tx(async (tx) => {
56-
const existing = await checkMemberIdentityExistence(
57-
tx,
58-
data.value,
59-
data.platform,
60-
data.type,
61-
)
62-
63-
for (const identity of existing) {
64-
if (identity.memberId === memberId) {
55+
try {
56+
result = await insertMemberIdentity(
57+
tx,
58+
{
59+
memberId,
60+
platform: data.platform,
61+
value: data.value,
62+
type: data.type,
63+
source: data.source,
64+
verified: data.verified,
65+
verifiedBy: data.verifiedBy,
66+
},
67+
true,
68+
true,
69+
)
70+
} catch (error) {
71+
const constraint =
72+
error.constraint ?? error.original?.constraint ?? error.parent?.constraint
73+
74+
if (constraint === 'uix_memberIdentities_memberId_platform_value_type') {
6575
throw new ConflictError('Identity already exists on this member')
6676
}
6777

68-
if (identity.verified) {
78+
if (constraint === 'uix_memberIdentities_platform_value_type_verified') {
6979
throw new ConflictError('Identity already verified on another member')
7080
}
71-
}
7281

73-
result = await insertMemberIdentity(
74-
tx,
75-
{
76-
memberId,
77-
platform: data.platform,
78-
value: data.value,
79-
type: data.type,
80-
source: data.source,
81-
verified: data.verified,
82-
verifiedBy: data.verifiedBy,
83-
},
84-
true,
85-
true,
86-
)
82+
throw error
83+
}
8784

8885
// touch member updated at to trigger merge suggestion
8986
await touchMemberUpdatedAt(tx, memberId)

0 commit comments

Comments
 (0)