From 8dea0d3c062e685b8e79b0171792e64180758103 Mon Sep 17 00:00:00 2001 From: sthuray <138075787+sthuray@users.noreply.github.com> Date: Sun, 29 Dec 2024 19:33:26 -0500 Subject: [PATCH 1/3] Connect invite-user to Frontend --- frontend/src/APIClients/UserAPIClient.ts | 18 ++++++++++++++++-- .../components/pages/UserManagementPage.tsx | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/frontend/src/APIClients/UserAPIClient.ts b/frontend/src/APIClients/UserAPIClient.ts index f89524f0..3c8e1713 100644 --- a/frontend/src/APIClients/UserAPIClient.ts +++ b/frontend/src/APIClients/UserAPIClient.ts @@ -14,7 +14,7 @@ const get = async (): Promise => { }); return data; } catch (error) { - throw new Error(`Failed to get entity: ${error}`); + throw new Error(`Failed to get users. ${error instanceof Error ? error.message : "Unknown error occured."}`); } }; @@ -33,4 +33,18 @@ const create = async (formData: CreateUserDTO): Promise => { } }; -export default { get, create }; +const invite = async (email: string): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + await baseAPIClient.post("/auth/invite-user", { email }, { + headers: { Authorization: bearerToken }, + }); + } catch (error) { + throw new Error(`Failed to invite user with email '${email}'`) + } +} + +export default { get, create, invite }; diff --git a/frontend/src/components/pages/UserManagementPage.tsx b/frontend/src/components/pages/UserManagementPage.tsx index 6ccafc20..4294da55 100644 --- a/frontend/src/components/pages/UserManagementPage.tsx +++ b/frontend/src/components/pages/UserManagementPage.tsx @@ -32,6 +32,7 @@ const handleUserSubmit = async (formData: AddUserRequest) => { | "Staff" | "Volunteer", }); + await UserAPIClient.invite(formData.email); } catch (error) { throw error; } @@ -50,7 +51,7 @@ const UserManagementPage = (): React.ReactElement => { setUsers(fetchedUsers); } } catch (error) { - setErrorMessage(`Failed to get users: ${error}`); + setErrorMessage(`${error}`); } }; From 63dd3e038c4c3b81c20f4c1b0379ca24259e5063 Mon Sep 17 00:00:00 2001 From: sthuray <138075787+sthuray@users.noreply.github.com> Date: Sun, 29 Dec 2024 19:34:05 -0500 Subject: [PATCH 2/3] Update user to ACTIVE after activation --- backend/typescript/rest/authRoutes.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/typescript/rest/authRoutes.ts b/backend/typescript/rest/authRoutes.ts index 945fb4c9..d3f41361 100644 --- a/backend/typescript/rest/authRoutes.ts +++ b/backend/typescript/rest/authRoutes.ts @@ -57,9 +57,13 @@ authRouter.post( async (req, res) => { try { if (isAuthorizedByEmail(req.body.email)) { - const userDTO = await userService.getUserByEmail(req.body.email); - const rest = { ...{ accessToken: req.body.accessToken }, ...userDTO }; + const user = await userService.getUserByEmail(req.body.email); + + const activatedUser = user; + activatedUser.status = UserStatus.ACTIVE; + await userService.updateUserById(user.id, activatedUser); + const rest = { ...{ accessToken: req.body.accessToken }, ...activatedUser }; res .cookie("refreshToken", req.body.refreshToken, cookieOptions) .status(200) From 24379b9e440dc49f6c877a98ad5b1f13e6691e8b Mon Sep 17 00:00:00 2001 From: Justin Lau Date: Thu, 30 Jan 2025 21:36:30 -0500 Subject: [PATCH 3/3] Fix linting errors --- backend/typescript/rest/authRoutes.ts | 7 +++++-- frontend/src/APIClients/UserAPIClient.ts | 20 ++++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/backend/typescript/rest/authRoutes.ts b/backend/typescript/rest/authRoutes.ts index d3f41361..76f7d587 100644 --- a/backend/typescript/rest/authRoutes.ts +++ b/backend/typescript/rest/authRoutes.ts @@ -58,12 +58,15 @@ authRouter.post( try { if (isAuthorizedByEmail(req.body.email)) { const user = await userService.getUserByEmail(req.body.email); - + const activatedUser = user; activatedUser.status = UserStatus.ACTIVE; await userService.updateUserById(user.id, activatedUser); - const rest = { ...{ accessToken: req.body.accessToken }, ...activatedUser }; + const rest = { + ...{ accessToken: req.body.accessToken }, + ...activatedUser, + }; res .cookie("refreshToken", req.body.refreshToken, cookieOptions) .status(200) diff --git a/frontend/src/APIClients/UserAPIClient.ts b/frontend/src/APIClients/UserAPIClient.ts index 3c8e1713..d3fb6d3d 100644 --- a/frontend/src/APIClients/UserAPIClient.ts +++ b/frontend/src/APIClients/UserAPIClient.ts @@ -14,7 +14,11 @@ const get = async (): Promise => { }); return data; } catch (error) { - throw new Error(`Failed to get users. ${error instanceof Error ? error.message : "Unknown error occured."}`); + throw new Error( + `Failed to get users. ${ + error instanceof Error ? error.message : "Unknown error occured." + }`, + ); } }; @@ -39,12 +43,16 @@ const invite = async (email: string): Promise => { "accessToken", )}`; try { - await baseAPIClient.post("/auth/invite-user", { email }, { - headers: { Authorization: bearerToken }, - }); + await baseAPIClient.post( + "/auth/invite-user", + { email }, + { + headers: { Authorization: bearerToken }, + }, + ); } catch (error) { - throw new Error(`Failed to invite user with email '${email}'`) + throw new Error(`Failed to invite user with email '${email}'`); } -} +}; export default { get, create, invite };