From c53416ecfe4f1243e13344f058722604139dd165 Mon Sep 17 00:00:00 2001 From: Finn Ickler Date: Tue, 7 Nov 2023 12:13:19 +0100 Subject: [PATCH 1/2] use bulk route to get User Info --- .../api/registration/get/get_registrations.ts | 31 +++++++------------ Frontend/src/api/user/get/get_user_info.ts | 12 ++++--- .../components/RegistrationEditor.jsx | 2 +- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/Frontend/src/api/registration/get/get_registrations.ts b/Frontend/src/api/registration/get/get_registrations.ts index c92ae532..83ed3716 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,14 @@ 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.find((info) => info.user.id === registration.user_id)!.user, + })) } export async function getAllRegistrations( @@ -48,7 +43,6 @@ export async function getAllRegistrations( headers: { Authorization: await getJWT() }, } ) - const regList = [] if (error) { if (error.error === EXPIRED_TOKEN) { await getJWT(true) @@ -56,14 +50,11 @@ 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.find((info) => info.user.id === registration.user_id)!.user, + })) } 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..76921082 100644 --- a/Frontend/src/api/user/get/get_user_info.ts +++ b/Frontend/src/api/user/get/get_user_info.ts @@ -1,5 +1,5 @@ import externalServiceFetch from '../../helper/external_service_fetch' -import { userInfoRoute } from '../../helper/routes' +import { userInfoRoute, usersInfoRoute } from '../../helper/routes' export interface User { id: string @@ -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 { + 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' From c4813efa464ecc351e69326d8ef9e7eaf621fcee Mon Sep 17 00:00:00 2001 From: FinnIckler Date: Fri, 10 Nov 2023 15:07:57 +0100 Subject: [PATCH 2/2] fix error where user_id was not compared correctly --- Frontend/src/api/registration/get/get_registrations.ts | 8 ++++++-- Frontend/src/api/user/get/get_user_info.ts | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Frontend/src/api/registration/get/get_registrations.ts b/Frontend/src/api/registration/get/get_registrations.ts index 83ed3716..cd555d45 100644 --- a/Frontend/src/api/registration/get/get_registrations.ts +++ b/Frontend/src/api/registration/get/get_registrations.ts @@ -28,7 +28,9 @@ export async function getConfirmedRegistrations( const userInfos = await getCompetitorsInfo(data!.map((d) => d.user_id)) return data!.map((registration) => ({ ...registration, - user: userInfos.find((info) => info.user.id === registration.user_id)!.user, + user: userInfos.users.find( + (user) => user.id === Number(registration.user_id) + ), })) } @@ -53,7 +55,9 @@ export async function getAllRegistrations( const userInfos = await getCompetitorsInfo(data!.map((d) => d.user_id)) return data!.map((registration) => ({ ...registration, - user: userInfos.find((info) => info.user.id === registration.user_id)!.user, + user: userInfos.users.find( + (user) => user.id === Number(registration.user_id) + ), })) } diff --git a/Frontend/src/api/user/get/get_user_info.ts b/Frontend/src/api/user/get/get_user_info.ts index 76921082..fa83d982 100644 --- a/Frontend/src/api/user/get/get_user_info.ts +++ b/Frontend/src/api/user/get/get_user_info.ts @@ -2,7 +2,7 @@ import externalServiceFetch from '../../helper/external_service_fetch' import { userInfoRoute, usersInfoRoute } from '../../helper/routes' export interface User { - id: string + id: number wca_id: string name: string country: { @@ -22,6 +22,6 @@ export async function getCompetitorInfo(userId: string): Promise { export async function getCompetitorsInfo( userIds: string[] -): Promise { +): Promise<{ users: User[] }> { return externalServiceFetch(usersInfoRoute(userIds)) }