@@ -52,12 +52,22 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P
5252 throw new NotFoundError ( 'Work experience not found' )
5353 }
5454
55+ // Stash org fields for response fallback when reject soft-deletes the row.
56+ const memberOrgsWithOrgDataBeforeChange = verified
57+ ? [ ]
58+ : ( (
59+ await fetchManyMemberOrgsWithOrgData ( qx , [ memberId ] , {
60+ withDomains : true ,
61+ } )
62+ ) . get ( memberId ) ?? [ ] )
63+
5564 const overlappingGroupedRows = getOverlappingGroupedMemberOrganizations ( memberOrgs , memberOrg )
5665
57- const memberOrgIdsToDelete = [
58- workExperienceId ,
59- ...overlappingGroupedRows . flatMap ( ( row ) => ( row . id ? [ row . id ] : [ ] ) ) ,
60- ]
66+ const overlappingRowsWithIds = overlappingGroupedRows . filter (
67+ ( row ) : row is typeof row & { id : string } => ! ! row . id ,
68+ )
69+
70+ const memberOrgIdsToDelete = [ workExperienceId , ...overlappingRowsWithIds . map ( ( row ) => row . id ) ]
6171
6272 const verifiedUpdate = { verified, verifiedBy }
6373
@@ -78,9 +88,7 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P
7888 verifiedUpdate ,
7989 )
8090
81- for ( const overlappingRow of overlappingGroupedRows . filter (
82- ( row ) : row is typeof row & { id : string } => ! ! row . id ,
83- ) ) {
91+ for ( const overlappingRow of overlappingRowsWithIds ) {
8492 await updateMemberOrganization ( tx , memberId , overlappingRow . id , verifiedUpdate )
8593 }
8694 } else {
@@ -96,17 +104,26 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P
96104 } )
97105 }
98106
99- captureNewState ( updatedMemberOrg ?? { ...memberOrg , verified , verifiedBy } )
107+ captureNewState ( updatedMemberOrg ?? { ...memberOrg , ... verifiedUpdate } )
100108 } ) ,
101109 )
102110
103- const orgsMap = await fetchManyMemberOrgsWithOrgData ( qx , [ memberId ] )
111+ const orgsMap = await fetchManyMemberOrgsWithOrgData ( qx , [ memberId ] , {
112+ withDomains : true ,
113+ } )
114+
115+ const groupedMemberOrgs = groupMemberOrganizations ( orgsMap . get ( memberId ) ?? [ ] )
116+ const groupedMemberOrgsBeforeChange = groupMemberOrganizations ( memberOrgsWithOrgDataBeforeChange )
117+
118+ const fallbackMo = groupedMemberOrgsBeforeChange . find ( ( mo ) => mo . id === workExperienceId )
104119
105120 const responseMo : IMemberRoleWithOrganization =
106- groupMemberOrganizations ( orgsMap . get ( memberId ) ?? [ ] ) . find (
107- ( mo ) => mo . id === workExperienceId ,
108- ) ??
109- ( { ...memberOrg , ...updatedMemberOrg , verified, verifiedBy } as IMemberRoleWithOrganization )
121+ groupedMemberOrgs . find ( ( mo ) => mo . id === workExperienceId ) ??
122+ ( fallbackMo ? { ...fallbackMo , ...verifiedUpdate } : undefined )
123+
124+ if ( ! responseMo ) {
125+ throw new NotFoundError ( 'Work experience not found' )
126+ }
110127
111128 ok ( res , toMemberWorkExperience ( responseMo ) )
112129}
0 commit comments