Skip to content

Commit 00068d8

Browse files
committed
Refactor user data fetching to async/await with parallel requests
- simplified code with async/await and Promise.all() for parallel API calls - Improved error handling and ensured loader is stopped in finally
1 parent 7b1a13d commit 00068d8

1 file changed

Lines changed: 69 additions & 30 deletions

File tree

frontend/src/store/actions/auth.js

Lines changed: 69 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export const setAuthDetails = (username, token, osm_oauth_token) => (dispatch) =
114114
// UPDATES OSM INFORMATION OF THE USER
115115
export const setUserDetails =
116116
(username, encodedToken, update = false) =>
117-
(dispatch) => {
117+
async (dispatch) => {
118118
// only trigger the loader if this function is not being triggered to update the user information
119119
if (!update) dispatch(setLoader(true));
120120
fetchLocalJSONAPI(`users/${username}/openstreetmap/`, encodedToken)
@@ -123,36 +123,75 @@ export const setUserDetails =
123123
console.log(error);
124124
dispatch(setLoader(false));
125125
});
126-
// GET USER DETAILS
127-
fetchLocalJSONAPI(`users/queries/${username}/`, encodedToken)
128-
.then((userDetails) => {
129-
dispatch(updateUserDetails(userDetails));
130-
// GET USER ORGS INFO
131-
fetchLocalJSONAPI(
132-
`organisations/?omitManagerList=true&manager_user_id=${userDetails.id}`,
133-
encodedToken,
134-
)
135-
.then((orgs) =>
136-
dispatch(updateOrgsInfo(orgs.organisations.map((org) => org.organisationId))),
137-
)
138-
.catch((error) => dispatch(updateOrgsInfo([])));
139-
fetchLocalJSONAPI(
140-
`teams/?omitMemberList=true&team_role=PROJECT_MANAGER&member=${userDetails.id}`,
141-
encodedToken,
142-
)
143-
.then((teams) => dispatch(updatePMsTeams(teams.teams.map((team) => team.teamId))))
144-
.catch((error) => dispatch(updatePMsTeams([])));
145-
dispatch(setLoader(false));
146126

147-
fetchLocalJSONAPI(`teams/?fullMemberList=false&manager=${userDetails.id}`, encodedToken)
148-
.then((teams) => dispatch(updateTMsTeams(teams.teams.map((team) => team.teamId))))
149-
.catch((error) => dispatch(updateTMsTeams([])));
150-
dispatch(setLoader(false));
151-
})
152-
.catch((error) => {
153-
if (error.message === 'InvalidToken') dispatch(logout());
154-
dispatch(setLoader(false));
155-
});
127+
try {
128+
const userDetails = await fetchLocalJSONAPI(`users/queries/${username}/`, encodedToken);
129+
130+
dispatch(updateUserDetails(userDetails));
131+
132+
const userId = userDetails.id;
133+
134+
const orgsPromise = fetchLocalJSONAPI(
135+
`organisations/?omitManagerList=true&manager_user_id=${userId}`,
136+
encodedToken,
137+
)
138+
.then((orgs) => dispatch(updateOrgsInfo(orgs.organisations.map((o) => o.organisationId))))
139+
.catch(() => dispatch(updateOrgsInfo([])));
140+
141+
const pmsTeamsPromise = fetchLocalJSONAPI(
142+
`teams/?omitMemberList=true&team_role=PROJECT_MANAGER&member=${userId}`,
143+
encodedToken,
144+
)
145+
.then((teams) => dispatch(updatePMsTeams(teams.teams.map((t) => t.teamId))))
146+
.catch(() => dispatch(updatePMsTeams([])));
147+
148+
const tmsTeamsPromise = fetchLocalJSONAPI(
149+
`teams/?fullMemberList=false&manager=${userId}`,
150+
encodedToken,
151+
)
152+
.then((teams) => dispatch(updateTMsTeams(teams.teams.map((t) => t.teamId))))
153+
.catch(() => dispatch(updateTMsTeams([])));
154+
155+
// Run all parallel requests at once
156+
await Promise.all([orgsPromise, pmsTeamsPromise, tmsTeamsPromise]);
157+
} catch (error) {
158+
if (error.message === 'InvalidToken') {
159+
dispatch(logout());
160+
}
161+
} finally {
162+
dispatch(setLoader(false));
163+
}
164+
165+
// GET USER DETAILS
166+
// fetchLocalJSONAPI(`users/queries/${username}/`, encodedToken)
167+
// .then((userDetails) => {
168+
// dispatch(updateUserDetails(userDetails));
169+
// // GET USER ORGS INFO
170+
// fetchLocalJSONAPI(
171+
// `organisations/?omitManagerList=true&manager_user_id=${userDetails.id}`,
172+
// encodedToken,
173+
// )
174+
// .then((orgs) =>
175+
// dispatch(updateOrgsInfo(orgs.organisations.map((org) => org.organisationId))),
176+
// )
177+
// .catch((error) => dispatch(updateOrgsInfo([])));
178+
// fetchLocalJSONAPI(
179+
// `teams/?omitMemberList=true&team_role=PROJECT_MANAGER&member=${userDetails.id}`,
180+
// encodedToken,
181+
// )
182+
// .then((teams) => dispatch(updatePMsTeams(teams.teams.map((team) => team.teamId))))
183+
// .catch((error) => dispatch(updatePMsTeams([])));
184+
// dispatch(setLoader(false));
185+
186+
// fetchLocalJSONAPI(`teams/?fullMemberList=false&manager=${userDetails.id}`, encodedToken)
187+
// .then((teams) => dispatch(updateTMsTeams(teams.teams.map((team) => team.teamId))))
188+
// .catch((error) => dispatch(updateTMsTeams([])));
189+
// dispatch(setLoader(false));
190+
// })
191+
// .catch((error) => {
192+
// if (error.message === 'InvalidToken') dispatch(logout());
193+
// dispatch(setLoader(false));
194+
// });
156195
};
157196

158197
export const getUserDetails = (state) => (dispatch) => {

0 commit comments

Comments
 (0)