diff --git a/backend/src/api/public/v1/members/work-experiences/verifyMemberWorkExperience.ts b/backend/src/api/public/v1/members/work-experiences/verifyMemberWorkExperience.ts index 650e3ad92c..be85eca166 100644 --- a/backend/src/api/public/v1/members/work-experiences/verifyMemberWorkExperience.ts +++ b/backend/src/api/public/v1/members/work-experiences/verifyMemberWorkExperience.ts @@ -52,24 +52,22 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P throw new NotFoundError('Work experience not found') } - const orgsMapBeforeChange = await fetchManyMemberOrgsWithOrgData(qx, [memberId], { - withDomains: true, - }) - - const workExperienceWithOrgData = groupMemberOrganizations( - orgsMapBeforeChange.get(memberId) ?? [], - ).find((mo) => mo.id === workExperienceId) - - if (!workExperienceWithOrgData) { - throw new NotFoundError('Work experience not found') - } + // Stash org fields for response fallback when reject soft-deletes the row. + const memberOrgsWithOrgDataBeforeChange = verified + ? [] + : (( + await fetchManyMemberOrgsWithOrgData(qx, [memberId], { + withDomains: true, + }) + ).get(memberId) ?? []) const overlappingGroupedRows = getOverlappingGroupedMemberOrganizations(memberOrgs, memberOrg) - const memberOrgIdsToDelete = [ - workExperienceId, - ...overlappingGroupedRows.flatMap((row) => (row.id ? [row.id] : [])), - ] + const overlappingRowsWithIds = overlappingGroupedRows.filter( + (row): row is typeof row & { id: string } => !!row.id, + ) + + const memberOrgIdsToDelete = [workExperienceId, ...overlappingRowsWithIds.map((row) => row.id)] const verifiedUpdate = { verified, verifiedBy } @@ -90,9 +88,7 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P verifiedUpdate, ) - for (const overlappingRow of overlappingGroupedRows.filter( - (row): row is typeof row & { id: string } => !!row.id, - )) { + for (const overlappingRow of overlappingRowsWithIds) { await updateMemberOrganization(tx, memberId, overlappingRow.id, verifiedUpdate) } } else { @@ -108,19 +104,25 @@ export async function verifyMemberWorkExperience(req: Request, res: Response): P }) } - captureNewState(updatedMemberOrg ?? { ...memberOrg, verified, verifiedBy }) + captureNewState(updatedMemberOrg ?? { ...memberOrg, ...verifiedUpdate }) }), ) - const orgsMap = await fetchManyMemberOrgsWithOrgData(qx, [memberId], { withDomains: true }) + const orgsMap = await fetchManyMemberOrgsWithOrgData(qx, [memberId], { + withDomains: true, + }) + + const groupedMemberOrgs = groupMemberOrganizations(orgsMap.get(memberId) ?? []) + const groupedMemberOrgsBeforeChange = groupMemberOrganizations(memberOrgsWithOrgDataBeforeChange) - const responseMo: IMemberRoleWithOrganization = groupMemberOrganizations( - orgsMap.get(memberId) ?? [], - ).find((mo) => mo.id === workExperienceId) ?? { - ...workExperienceWithOrgData, - ...updatedMemberOrg, - verified, - verifiedBy, + const fallbackMo = groupedMemberOrgsBeforeChange.find((mo) => mo.id === workExperienceId) + + const responseMo: IMemberRoleWithOrganization = + groupedMemberOrgs.find((mo) => mo.id === workExperienceId) ?? + (fallbackMo ? { ...fallbackMo, ...verifiedUpdate } : undefined) + + if (!responseMo) { + throw new NotFoundError('Work experience not found') } ok(res, toMemberWorkExperience(responseMo))