From ea5bc2c2524366c7920a3d921a60f21c175ee80f Mon Sep 17 00:00:00 2001
From: DavePk04 <Dave.Pikop.Pokam@ulb.be>
Date: Thu, 30 Jan 2025 10:29:28 +0100
Subject: [PATCH] feat: Update user active status on login/logout and improve
 chat UI

---
 frontend/src/routes/+layout.server.ts         | 12 +++++++--
 frontend/src/routes/logout/+page.server.ts    | 18 +++++++++++--
 .../src/routes/sessions/[id]/Message.svelte   | 26 ++++++-------------
 3 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/frontend/src/routes/+layout.server.ts b/frontend/src/routes/+layout.server.ts
index b3aecd87..c403b2a7 100644
--- a/frontend/src/routes/+layout.server.ts
+++ b/frontend/src/routes/+layout.server.ts
@@ -1,4 +1,5 @@
 import { type ServerLoad, redirect } from '@sveltejs/kit';
+import { patchUserAPI } from '$lib/api/users';
 
 const publicly_allowed = ['/login', '/register', '/tests', '/surveys', '/tutor/register'];
 
@@ -11,10 +12,17 @@ const isPublic = (path: string) => {
 	return false;
 };
 
-export const load: ServerLoad = async ({ locals, url }) => {
+export const load: ServerLoad = async ({ locals, url, fetch }) => {
+
 	if (locals.user == null || locals.user == undefined) {
 		if (!isPublic(url.pathname)) {
-			redirect(303, `/login`);
+			throw redirect(303, `/login`);
+		}
+	} else {
+		try {
+			await patchUserAPI(fetch, locals.user.id, { is_active: true });
+		} catch (error) {
+			console.error('Failed to update user status:', error);
 		}
 	}
 
diff --git a/frontend/src/routes/logout/+page.server.ts b/frontend/src/routes/logout/+page.server.ts
index 7790fb9c..7cd9bda3 100644
--- a/frontend/src/routes/logout/+page.server.ts
+++ b/frontend/src/routes/logout/+page.server.ts
@@ -1,8 +1,22 @@
 import { type ServerLoad, redirect } from '@sveltejs/kit';
+import { patchUserAPI } from '$lib/api/users';
+
+export const load: ServerLoad = async ({ cookies, locals, fetch }) => {
+	if (locals.user) {
+		try {
+			const success = await patchUserAPI(fetch, locals.user.id, { is_active: false });
+			if (!success) {
+				console.error('Failed to update user status.');
+			}
+		} catch (error) {
+			console.error('Error updating user status:', error);
+		}
+	}
 
-export const load: ServerLoad = async ({ cookies }) => {
 	cookies.set('access_token_cookie', '', { maxAge: -1, path: '/' });
 	cookies.set('refresh_token_cookie', '', { maxAge: -1, path: '/' });
 
-	redirect(303, '/login');
+	locals.user = null;
+
+	throw redirect(303, '/login');
 };
diff --git a/frontend/src/routes/sessions/[id]/Message.svelte b/frontend/src/routes/sessions/[id]/Message.svelte
index aa19c714..796beded 100644
--- a/frontend/src/routes/sessions/[id]/Message.svelte
+++ b/frontend/src/routes/sessions/[id]/Message.svelte
@@ -186,28 +186,20 @@
 		await message.deleteFeedback(feedback);
 	}
 
-	function getUserStatus(user: User, isInConversation: boolean): string {
-		console.log('status', user.is_active);
+	function getUserStatus(user: User | null, isInConversation: boolean): string {
+		if (!user) {
+			return 'red';
+		}
+
 		if (!user.is_active) {
 			return 'red';
 		}
+
 		if (isInConversation) {
 			return 'green';
 		}
-		return 'orange';
-	}
 
-	function getUserStatusTooltip(status: string): string {
-		switch (status) {
-			case 'green':
-				return 'User is in this conversation';
-			case 'orange':
-				return 'User is connected but not in this conversation';
-			case 'red':
-				return 'User is not connected to LL';
-			default:
-				return '';
-		}
+		return 'orange';
 	}
 </script>
 
@@ -229,9 +221,7 @@
 					? 'bg-green-500'
 					: getUserStatus(message.user, false) === 'orange'
 						? 'bg-orange-500'
-						: getUserStatus(message.user, false) === 'red'
-							? 'bg-red-500'
-							: ''
+						: 'bg-red-500'
 			}`}
 		></div>
 	</div>
-- 
GitLab