From 2eecf17d42ab962d7c0f01cf49e4ee4fe2153e27 Mon Sep 17 00:00:00 2001
From: al8763be <al8763be-s@student.lu.se>
Date: Sun, 17 Mar 2024 14:43:09 +0100
Subject: [PATCH] Login feature API

---
 frontend/src/API/API.ts | 72 +++++++++++++++++++++++++++++++++--------
 1 file changed, 59 insertions(+), 13 deletions(-)

diff --git a/frontend/src/API/API.ts b/frontend/src/API/API.ts
index ed64f71..be041f1 100644
--- a/frontend/src/API/API.ts
+++ b/frontend/src/API/API.ts
@@ -22,12 +22,19 @@ interface API {
     token: string,
   ): Promise<APIResponse<Project>>;
   /** Submit a weekly report */
-  submitWeeklyReport(project: NewWeeklyReport, token: string): Promise<APIResponse<Project>>;
+  submitWeeklyReport(
+    project: NewWeeklyReport,
+    token: string,
+  ): Promise<APIResponse<Project>>;
   /** Renew the token */
   renewToken(token: string): Promise<APIResponse<string>>;
   /** Gets all the projects of a user*/
-  getUserProjects(username: string, token: string): Promise<APIResponse<Project[]>>;
-  
+  getUserProjects(
+    username: string,
+    token: string,
+  ): Promise<APIResponse<Project[]>>;
+  /** Login */
+  login(NewUser: NewUser): Promise<APIResponse<JSON>>;
 }
 
 // Export an instance of the API
@@ -55,7 +62,7 @@ export const api: API = {
 
   async removeUser(
     username: string,
-    token: string
+    token: string,
   ): Promise<APIResponse<User>> {
     try {
       const response = await fetch("/api/userdelete", {
@@ -80,7 +87,7 @@ export const api: API = {
 
   async createProject(
     project: NewProject,
-    token: string
+    token: string,
   ): Promise<APIResponse<Project>> {
     try {
       const response = await fetch("/api/project", {
@@ -135,18 +142,26 @@ export const api: API = {
       });
 
       if (!response.ok) {
-        return Promise.resolve({ success: false, message: "Failed to get user projects" });
+        return Promise.resolve({
+          success: false,
+          message: "Failed to get user projects",
+        });
       } else {
         const data = (await response.json()) as Project[];
         return Promise.resolve({ success: true, data });
       }
-    }
-    catch (e) {
-      return Promise.resolve({ success: false, message: "Failed to get user projects" });
+    } catch (e) {
+      return Promise.resolve({
+        success: false,
+        message: "Failed to get user projects",
+      });
     }
   },
-  
-  submitWeeklyReport: function (project: NewWeeklyReport, token: string): Promise<APIResponse<Project>> {
+
+  async submitWeeklyReport(
+    project: NewWeeklyReport,
+    token: string,
+  ): Promise<APIResponse<Project>> {
     try {
       return fetch("/api/submitWeeklyReport", {
         method: "POST",
@@ -158,7 +173,10 @@ export const api: API = {
       })
         .then((response) => {
           if (!response.ok) {
-            return { success: false, message: "Failed to submit weekly report" };
+            return {
+              success: false,
+              message: "Failed to submit weekly report",
+            };
           } else {
             return response.json();
           }
@@ -167,7 +185,35 @@ export const api: API = {
           return { success: true, data };
         });
     } catch (e) {
-      return Promise.resolve({ success: false, message: "Failed to submit weekly report" });
+      return Promise.resolve({
+        success: false,
+        message: "Failed to submit weekly report",
+      });
+    }
+  },
+
+  async login(NewUser: NewUser): Promise<APIResponse<JSON>> {
+    try {
+      const response = await fetch("/api/login", {
+        method: "POST",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        body: JSON.stringify(NewUser),
+      });
+
+      if (response) {
+        if (!response.ok) {
+          return { success: false, message: "Failed to login" };
+        } else {
+          const data = await response.json();
+          return { success: true, data };
+        }
+      }
+
+      return { success: false, message: "Failed to login" }; // Add return statement
+    } catch (e) {
+      return Promise.resolve({ success: false, message: "Failed to login" });
     }
   }
 };