Skip to content

Commit d7e9bb0

Browse files
authored
fix: remove unnecessary grouped lookup in verify work experience (#4317)
Signed-off-by: Yeganathan S <63534555+skwowet@users.noreply.github.com>
1 parent 2c103c3 commit d7e9bb0

1 file changed

Lines changed: 29 additions & 27 deletions

File tree

backend/src/api/public/v1/members/work-experiences/verifyMemberWorkExperience.ts

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)