diff --git a/Frontend/src/api/registration/get/get_registrations.ts b/Frontend/src/api/registration/get/get_registrations.ts index c92ae532..cd555d45 100644 --- a/Frontend/src/api/registration/get/get_registrations.ts +++ b/Frontend/src/api/registration/get/get_registrations.ts @@ -3,7 +3,7 @@ import { getJWT } from '../../auth/get_jwt' import backendFetch, { BackendError } from '../../helper/backend_fetch' import { EXPIRED_TOKEN } from '../../helper/error_codes' import { components, paths } from '../../schema' -import getCompetitorInfo from '../../user/get/get_user_info' +import { getCompetitorsInfo } from '../../user/get/get_user_info' const { GET } = createClient({ // TODO: Change this once we are fully migrated from backend fetch @@ -22,19 +22,16 @@ export async function getConfirmedRegistrations( params: { path: { competition_id: competitionID } }, } ) - const regList = [] if (!response.ok) { throw new BackendError(500, response.status) } - for (const registration of data!) { - const user = (await getCompetitorInfo(registration.user_id)).user - regList.push({ - user_id: registration.user_id, - competing: registration.competing, - user, - }) - } - return regList + const userInfos = await getCompetitorsInfo(data!.map((d) => d.user_id)) + return data!.map((registration) => ({ + ...registration, + user: userInfos.users.find( + (user) => user.id === Number(registration.user_id) + ), + })) } export async function getAllRegistrations( @@ -48,7 +45,6 @@ export async function getAllRegistrations( headers: { Authorization: await getJWT() }, } ) - const regList = [] if (error) { if (error.error === EXPIRED_TOKEN) { await getJWT(true) @@ -56,14 +52,13 @@ export async function getAllRegistrations( } throw new BackendError(error.error, response.status) } - for (const registration of data!) { - const user = (await getCompetitorInfo(registration.user_id)).user - regList.push({ - ...registration, - user, - }) - } - return regList + const userInfos = await getCompetitorsInfo(data!.map((d) => d.user_id)) + return data!.map((registration) => ({ + ...registration, + user: userInfos.users.find( + (user) => user.id === Number(registration.user_id) + ), + })) } export async function getSingleRegistration( diff --git a/Frontend/src/api/user/get/get_user_info.ts b/Frontend/src/api/user/get/get_user_info.ts index 05ed5685..fa83d982 100644 --- a/Frontend/src/api/user/get/get_user_info.ts +++ b/Frontend/src/api/user/get/get_user_info.ts @@ -1,8 +1,8 @@ import externalServiceFetch from '../../helper/external_service_fetch' -import { userInfoRoute } from '../../helper/routes' +import { userInfoRoute, usersInfoRoute } from '../../helper/routes' export interface User { - id: string + id: number wca_id: string name: string country: { @@ -16,8 +16,12 @@ export interface UserInfo { user: User } -export default async function getCompetitorInfo( - userId: string -): Promise { +export async function getCompetitorInfo(userId: string): Promise { return externalServiceFetch(userInfoRoute(userId)) } + +export async function getCompetitorsInfo( + userIds: string[] +): Promise<{ users: User[] }> { + return externalServiceFetch(usersInfoRoute(userIds)) +} diff --git a/Frontend/src/pages/registration_edit/components/RegistrationEditor.jsx b/Frontend/src/pages/registration_edit/components/RegistrationEditor.jsx index 955129dc..c22e9287 100644 --- a/Frontend/src/pages/registration_edit/components/RegistrationEditor.jsx +++ b/Frontend/src/pages/registration_edit/components/RegistrationEditor.jsx @@ -6,7 +6,7 @@ import { Button, Checkbox, Header, Segment, TextArea } from 'semantic-ui-react' import { CompetitionContext } from '../../../api/helper/context/competition_context' import { getSingleRegistration } from '../../../api/registration/get/get_registrations' import { updateRegistration } from '../../../api/registration/patch/update_registration' -import getCompetitorInfo from '../../../api/user/get/get_user_info' +import { getCompetitorInfo } from '../../../api/user/get/get_user_info' import { setMessage } from '../../../ui/events/messages' import LoadingMessage from '../../../ui/messages/loadingMessage' import styles from './editor.module.scss'