From e012b6ff1207b311948d45bf5e1589627f9830db Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Sun, 17 Mar 2024 22:48:38 +0100 Subject: [PATCH 1/2] Error checking in register component, redirect to login if success --- frontend/src/API/API.ts | 14 ++++++++++---- frontend/src/Components/Register.tsx | 21 +++++++++++++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/frontend/src/API/API.ts b/frontend/src/API/API.ts index 248ad37..9b11dba 100644 --- a/frontend/src/API/API.ts +++ b/frontend/src/API/API.ts @@ -37,13 +37,19 @@ export const api: API = { }); if (!response.ok) { - return { success: false, message: "Failed to register user" }; + return { + success: false, + message: "Failed to register user: " + response.status, + }; } else { - const data = (await response.json()) as User; - return { success: true, data }; + // const data = (await response.json()) as User; // The API does not currently return the user + return { success: true }; } } catch (e) { - return { success: false, message: "Failed to register user" }; + return { + success: false, + message: "Unknown error while registering user", + }; } }, diff --git a/frontend/src/Components/Register.tsx b/frontend/src/Components/Register.tsx index e4a3ba0..9e767ca 100644 --- a/frontend/src/Components/Register.tsx +++ b/frontend/src/Components/Register.tsx @@ -3,14 +3,26 @@ import { NewUser } from "../Types/Users"; import { api } from "../API/API"; import Logo from "../assets/Logo.svg"; import Button from "./Button"; +import { useNavigate } from "react-router-dom"; export default function Register(): JSX.Element { - const [username, setUsername] = useState(""); - const [password, setPassword] = useState(""); + const [username, setUsername] = useState<string>(); + const [password, setPassword] = useState<string>(); + const [errMessage, setErrMessage] = useState<string>(); + + const nav = useNavigate(); const handleRegister = async (): Promise<void> => { - const newUser: NewUser = { userName: username, password }; - await api.registerUser(newUser); // TODO: Handle errors + const newUser: NewUser = { + userName: username ?? "", + password: password ?? "", + }; + const response = await api.registerUser(newUser); + if (response.success) { + nav("/"); // Instantly navigate to the login page + } else { + setErrMessage(response.message ?? "Unknown error"); + } }; return ( @@ -67,6 +79,7 @@ export default function Register(): JSX.Element { }} /> </div> + {errMessage && <p className="text-red-500 text-xs">{errMessage}</p>} <div className="flex items-center justify-between"> <Button text="Register" From f6e4603603a4973fb951f48bfad652783437231c Mon Sep 17 00:00:00 2001 From: dDogge <douglasfjallrud@gmail.com> Date: Sun, 17 Mar 2024 23:31:52 +0100 Subject: [PATCH 2/2] Added handler for SignWeeklyReport named SignReport in handlers_report_related --- backend/internal/handlers/global_state.go | 1 + .../handlers/handlers_report_related.go | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/backend/internal/handlers/global_state.go b/backend/internal/handlers/global_state.go index 57a1969..c8beb1c 100644 --- a/backend/internal/handlers/global_state.go +++ b/backend/internal/handlers/global_state.go @@ -16,6 +16,7 @@ type GlobalState interface { GetUserProjects(c *fiber.Ctx) error // To get all projects SubmitWeeklyReport(c *fiber.Ctx) error GetWeeklyReport(c *fiber.Ctx) error + SignReport(c *fiber.Ctx) error // GetProject(c *fiber.Ctx) error // To get a specific project // UpdateProject(c *fiber.Ctx) error // To update a project // DeleteProject(c *fiber.Ctx) error // To delete a project diff --git a/backend/internal/handlers/handlers_report_related.go b/backend/internal/handlers/handlers_report_related.go index 8754afd..8168dbd 100644 --- a/backend/internal/handlers/handlers_report_related.go +++ b/backend/internal/handlers/handlers_report_related.go @@ -60,3 +60,31 @@ func (gs *GState) GetWeeklyReport(c *fiber.Ctx) error { // Return the retrieved weekly report return c.JSON(report) } + +func (gs *GState) SignReport(c *fiber.Ctx) error { + // Extract the necessary parameters from the token + user := c.Locals("user").(*jwt.Token) + claims := user.Claims.(jwt.MapClaims) + managerUsername := claims["name"].(string) + + // Extract the report ID and project manager ID from request parameters + reportID, err := strconv.Atoi(c.Params("reportId")) + if err != nil { + return c.Status(400).SendString("Invalid report ID") + } + + // Call the database function to get the project manager ID + managerID, err := gs.Db.GetUserId(managerUsername) + if err != nil { + return c.Status(500).SendString("Failed to get project manager ID") + } + + // Call the database function to sign the weekly report + err = gs.Db.SignWeeklyReport(reportID, managerID) + if err != nil { + return c.Status(500).SendString("Failed to sign the weekly report: " + err.Error()) + } + + // Return success response + return c.Status(200).SendString("Weekly report signed successfully") +}