@@ -52,24 +52,22 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P
5252 throw new NotFoundError ( 'Work experience not found' )
5353 }
5454
55- const orgsMapBeforeChange = await fetchManyMemberOrgsWithOrgData ( qx , [ memberId ] , {
56- withDomains : true ,
57- } )
58-
59- const workExperienceWithOrgData = groupMemberOrganizations (
60- orgsMapBeforeChange . get ( memberId ) ?? [ ] ,
61- ) . find ( ( mo ) => mo . id === workExperienceId )
62-
63- if ( ! workExperienceWithOrgData ) {
64- throw new NotFoundError ( 'Work experience not found' )
65- }
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 ) ?? [ ] )
6663
6764 const overlappingGroupedRows = getOverlappingGroupedMemberOrganizations ( memberOrgs , memberOrg )
6865
69- const memberOrgIdsToDelete = [
70- workExperienceId ,
71- ...overlappingGroupedRows . flatMap ( ( row ) => ( row . id ? [ row . id ] : [ ] ) ) ,
72- ]
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 ) ]
7371
7472 const verifiedUpdate = { verified, verifiedBy }
7573
@@ -90,9 +88,7 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P
9088 verifiedUpdate ,
9189 )
9290
93- for ( const overlappingRow of overlappingGroupedRows . filter (
94- ( row ) : row is typeof row & { id : string } => ! ! row . id ,
95- ) ) {
91+ for ( const overlappingRow of overlappingRowsWithIds ) {
9692 await updateMemberOrganization ( tx , memberId , overlappingRow . id , verifiedUpdate )
9793 }
9894 } else {
@@ -108,19 +104,25 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P
108104 } )
109105 }
110106
111- captureNewState ( updatedMemberOrg ?? { ...memberOrg , verified , verifiedBy } )
107+ captureNewState ( updatedMemberOrg ?? { ...memberOrg , ... verifiedUpdate } )
112108 } ) ,
113109 )
114110
115- const orgsMap = await fetchManyMemberOrgsWithOrgData ( qx , [ memberId ] , { withDomains : true } )
111+ const orgsMap = await fetchManyMemberOrgsWithOrgData ( qx , [ memberId ] , {
112+ withDomains : true ,
113+ } )
114+
115+ const groupedMemberOrgs = groupMemberOrganizations ( orgsMap . get ( memberId ) ?? [ ] )
116+ const groupedMemberOrgsBeforeChange = groupMemberOrganizations ( memberOrgsWithOrgDataBeforeChange )
116117
117- const responseMo : IMemberRoleWithOrganization = groupMemberOrganizations (
118- orgsMap . get ( memberId ) ?? [ ] ,
119- ) . find ( ( mo ) => mo . id === workExperienceId ) ?? {
120- ...workExperienceWithOrgData ,
121- ...updatedMemberOrg ,
122- verified,
123- verifiedBy,
118+ const fallbackMo = groupedMemberOrgsBeforeChange . find ( ( mo ) => mo . id === workExperienceId )
119+
120+ const responseMo : 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' )
124126 }
125127
126128 ok ( res , toMemberWorkExperience ( responseMo ) )
0 commit comments