@@ -5,7 +5,6 @@ import { captureApiChange, memberEditIdentitiesAction } from '@crowd/audit-logs'
55import { ConflictError , NotFoundError } from '@crowd/common'
66import {
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