From 5c635662f41bc00cc7acb303bcb6dd4a28e9cbfb Mon Sep 17 00:00:00 2001
From: DavePk04 <Dave.Pikop.Pokam@ulb.be>
Date: Sat, 29 Mar 2025 13:32:42 +0100
Subject: [PATCH 1/4] Fix URL transition issue on step 8 towards
 /studies/study_id

---
 .../routes/register/[[studyId]]/+page.server.ts   |  7 ++++---
 .../src/routes/register/[[studyId]]/+page.svelte  | 15 ++++++++++-----
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/frontend/src/routes/register/[[studyId]]/+page.server.ts b/frontend/src/routes/register/[[studyId]]/+page.server.ts
index 1e911c77..3f3247d7 100644
--- a/frontend/src/routes/register/[[studyId]]/+page.server.ts
+++ b/frontend/src/routes/register/[[studyId]]/+page.server.ts
@@ -55,7 +55,8 @@ export const actions: Actions = {
 
 		return redirect(303, `/register/${studyId}`);
 	},
-	data: async ({ request, fetch, locals }) => {
+	data: async ({ request, fetch, locals, params }) => {
+		const studyId = params.studyId;
 		if (!locals.user) {
 			return { message: 'Unauthorized' };
 		}
@@ -95,7 +96,7 @@ export const actions: Actions = {
 			});
 			if (!response) return { message: 'Unknown error occurred' };
 
-			redirect(303, '/register');
+			redirect(303, `/register/${studyId}`);
 		} else if (locals.user.type == 1) {
 			if (!homeLanguage || !birthyear || !gender || !bio) {
 				return { message: 'Invalid request' };
@@ -116,7 +117,7 @@ export const actions: Actions = {
 				bio
 			});
 			if (!response) return { message: 'Unknown error occurred' };
-			redirect(303, '/register');
+			redirect(303, `/register/${studyId}`);
 		}
 	}
 };
diff --git a/frontend/src/routes/register/[[studyId]]/+page.svelte b/frontend/src/routes/register/[[studyId]]/+page.svelte
index 84b646af..a8280e52 100644
--- a/frontend/src/routes/register/[[studyId]]/+page.svelte
+++ b/frontend/src/routes/register/[[studyId]]/+page.svelte
@@ -615,17 +615,22 @@
 			<p class="text-center">
 				{@html $t('register.continue')}
 			</p>
-			<button class="button mt-4 w-full" onclick={() => (current_step = 6)}>
+			<button class="button mt-4 w-full" onclick={() => (current_step = 8)}>
 				{$t('register.continueButton')}
 			</button>
 			<button class="button mt-4 w-full" onclick={() => (document.location.href = '/')}>
 				{$t('register.startFastButton')}
 			</button>
 		</div>
-	{:else if current_step == 8}
-		{#if user}
-			<Typingtest onFinish={() => current_step++} {user} />
-		{/if}
+		{:else if current_step == 8}
+		<div class="text-center">
+			<p class="text-center">
+				{@html $t('register.start')}
+			</p>
+			<button class="button mt-4 m-auto" onclick={() => (document.location.href = `/studies/${study?.id}`)}>
+				{$t('register.continueButton')}
+			</button>
+		</div>
 	{:else if current_step == 9}
 		<div class="text-center">
 			<p class="text-center">
-- 
GitLab


From 7662de2639bad31fd774a42a96c0510a6f635fed Mon Sep 17 00:00:00 2001
From: DavePk04 <Dave.Pikop.Pokam@ulb.be>
Date: Sat, 29 Mar 2025 13:34:37 +0100
Subject: [PATCH 2/4] fix linting

---
 frontend/src/routes/register/[[studyId]]/+page.svelte | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/frontend/src/routes/register/[[studyId]]/+page.svelte b/frontend/src/routes/register/[[studyId]]/+page.svelte
index a8280e52..80c80753 100644
--- a/frontend/src/routes/register/[[studyId]]/+page.svelte
+++ b/frontend/src/routes/register/[[studyId]]/+page.svelte
@@ -622,12 +622,15 @@
 				{$t('register.startFastButton')}
 			</button>
 		</div>
-		{:else if current_step == 8}
+	{:else if current_step == 8}
 		<div class="text-center">
 			<p class="text-center">
 				{@html $t('register.start')}
 			</p>
-			<button class="button mt-4 m-auto" onclick={() => (document.location.href = `/studies/${study?.id}`)}>
+			<button
+				class="button mt-4 m-auto"
+				onclick={() => (document.location.href = `/studies/${study?.id}`)}
+			>
 				{$t('register.continueButton')}
 			</button>
 		</div>
-- 
GitLab


From 8c059bbd6580e4de18900f974986f1c49c598b6d Mon Sep 17 00:00:00 2001
From: DavePk04 <Dave.Pikop.Pokam@ulb.be>
Date: Sat, 29 Mar 2025 15:11:57 +0100
Subject: [PATCH 3/4] fixed dashboad page loading issue

---
 .../register/[[studyId]]/+page.server.ts      | 231 +++++++++---------
 1 file changed, 115 insertions(+), 116 deletions(-)

diff --git a/frontend/src/routes/register/[[studyId]]/+page.server.ts b/frontend/src/routes/register/[[studyId]]/+page.server.ts
index 3f3247d7..3aea7879 100644
--- a/frontend/src/routes/register/[[studyId]]/+page.server.ts
+++ b/frontend/src/routes/register/[[studyId]]/+page.server.ts
@@ -5,119 +5,118 @@ import { validateEmail, validatePassword, validateUsername } from '$lib/utils/se
 import { redirect, type Actions } from '@sveltejs/kit';
 
 export const actions: Actions = {
-	register: async ({ request, fetch, params }) => {
-		const formData = await request.formData();
-		const studyId = params.studyId;
-		if (!studyId) return { message: 'Invalid request' };
-
-		const email = formData.get('email');
-		const nickname = formData.get('nickname');
-		const password = formData.get('password');
-		const confirmPassword = formData.get('confirmPassword');
-		const role = formData.get('role');
-
-		if (!email || !nickname || !password || !confirmPassword) {
-			return { message: 'Invalid request' };
-		}
-
-		if (!validateEmail(email)) return { message: 'Invalid email' };
-		if (!validateUsername(nickname)) return { message: 'Invalid username' };
-		if (!validatePassword(password)) return { message: 'Invalid password' };
-
-		if (password !== confirmPassword) return { message: 'Passwords do not match' };
-
-		const is_tutor = Number(role) === 1;
-
-		let response = await fetch(`/api/auth/register`, {
-			headers: {
-				'Content-Type': 'application/json'
-			},
-			method: 'POST',
-			body: JSON.stringify({ email, nickname, password, is_tutor })
-		});
-
-		if (response.status === 400) return { message: 'User already exists' };
-		if (response.status === 401) return { message: 'Failed to create user' };
-		if (response.status === 422) return { message: 'Invalid request' };
-		if (!response.ok) return { message: 'Unknown error occurred' };
-
-		response = await fetch(`/api/auth/login`, {
-			headers: {
-				'Content-Type': 'application/json'
-			},
-			method: 'POST',
-			body: JSON.stringify({ email, password })
-		});
-
-		if (response.status === 401) return { message: 'Incorrect email or password' };
-		if (response.status === 422) return { message: 'Invalid request' };
-		if (!response.ok) return { message: 'Unknown error occurred' };
-
-		return redirect(303, `/register/${studyId}`);
-	},
-	data: async ({ request, fetch, locals, params }) => {
-		const studyId = params.studyId;
-		if (!locals.user) {
-			return { message: 'Unauthorized' };
-		}
-
-		const formData = await request.formData();
-
-		const homeLanguage = formData.get('homeLanguage');
-		const targetLanguage = formData.get('targetLanguage');
-		const birthyear = formData.get('birthyear');
-		const gender = formData.get('gender');
-		const study = formData.get('study');
-		const bio = formData.get('bio');
-		let my_tutor = formData.get('myTutor');
-
-		if (locals.user.type == 2) {
-			if (!homeLanguage || !targetLanguage || !birthyear || !gender) {
-				return { message: 'Invalid request' };
-			}
-			// Fixme: I struggled to retrieve the my_tutor's value in the form (temporary fix)
-			if (!my_tutor || (my_tutor as string).trim() === '') {
-				my_tutor = '';
-			}
-
-			let birthdate;
-			try {
-				birthdate = formatToUTCDate(new Date(parseInt(birthyear.toString()), 0, 30));
-			} catch (e) {
-				return { message: 'Invalid request' };
-			}
-
-			const response = await patchUserAPI(fetch, locals.user.id, {
-				home_language: homeLanguage,
-				target_language: targetLanguage,
-				gender,
-				birthdate,
-				my_tutor: my_tutor
-			});
-			if (!response) return { message: 'Unknown error occurred' };
-
-			redirect(303, `/register/${studyId}`);
-		} else if (locals.user.type == 1) {
-			if (!homeLanguage || !birthyear || !gender || !bio) {
-				return { message: 'Invalid request' };
-			}
-
-			let birthdate;
-			try {
-				birthdate = formatToUTCDate(new Date(parseInt(birthyear.toString()), 0, 30));
-			} catch (e) {
-				return { message: 'Invalid request' };
-			}
-
-			let response = await patchUserAPI(fetch, locals.user.id, {
-				home_language: homeLanguage,
-				target_language: targetLanguage,
-				gender,
-				birthdate,
-				bio
-			});
-			if (!response) return { message: 'Unknown error occurred' };
-			redirect(303, `/register/${studyId}`);
-		}
-	}
-};
+    register: async ({ request, fetch, params }) => {
+        const formData = await request.formData();
+        const studyId = params.studyId;
+        if (!studyId) return { message: 'Invalid request' };
+
+        const email = formData.get('email');
+        const nickname = formData.get('nickname');
+        const password = formData.get('password');
+        const confirmPassword = formData.get('confirmPassword');
+        const role = formData.get('role');
+
+        if (!email || !nickname || !password || !confirmPassword) {
+            return { message: 'Invalid request' };
+        }
+
+        if (!validateEmail(email)) return { message: 'Invalid email' };
+        if (!validateUsername(nickname)) return { message: 'Invalid username' };
+        if (!validatePassword(password)) return { message: 'Invalid password' };
+
+        if (password !== confirmPassword) return { message: 'Passwords do not match' };
+
+        const is_tutor = Number(role) === 1;
+
+        let response = await fetch(`/api/auth/register`, {
+            headers: {
+                'Content-Type': 'application/json'
+            },
+            method: 'POST',
+            body: JSON.stringify({ email, nickname, password, is_tutor })
+        });
+
+        if (response.status === 400) return { message: 'User already exists' };
+        if (response.status === 401) return { message: 'Failed to create user' };
+        if (response.status === 422) return { message: 'Invalid request' };
+        if (!response.ok) return { message: 'Unknown error occurred' };
+
+        response = await fetch(`/api/auth/login`, {
+            headers: {
+                'Content-Type': 'application/json'
+            },
+            method: 'POST',
+            body: JSON.stringify({ email, password })
+        });
+
+        if (response.status === 401) return { message: 'Incorrect email or password' };
+        if (response.status === 422) return { message: 'Invalid request' };
+        if (!response.ok) return { message: 'Unknown error occurred' };
+
+        return redirect(303, `/register/${studyId}`);
+    },
+    data: async ({ request, fetch, locals}) => {
+        if (!locals.user) {
+            return { message: 'Unauthorized' };
+        }
+
+        const formData = await request.formData();
+
+        const homeLanguage = formData.get('homeLanguage');
+        const targetLanguage = formData.get('targetLanguage');
+        const birthyear = formData.get('birthyear');
+        const gender = formData.get('gender');
+        const study = formData.get('study');
+        const bio = formData.get('bio');
+        let my_tutor = formData.get('myTutor');
+
+        if (locals.user.type == 2) {
+            if (!homeLanguage || !targetLanguage || !birthyear || !gender) {
+                return { message: 'Invalid request' };
+            }
+            // Fixme: I struggled to retrieve the my_tutor's value in the form (temporary fix)
+            if (!my_tutor || (my_tutor as string).trim() === '') {
+                my_tutor = '';
+            }
+
+            let birthdate;
+            try {
+                birthdate = formatToUTCDate(new Date(parseInt(birthyear.toString()), 0, 30));
+            } catch (e) {
+                return { message: 'Invalid request' };
+            }
+
+            const response = await patchUserAPI(fetch, locals.user.id, {
+                home_language: homeLanguage,
+                target_language: targetLanguage,
+                gender,
+                birthdate,
+                my_tutor: my_tutor
+            });
+            if (!response) return { message: 'Unknown error occurred' };
+
+            redirect(303, `/register/`);
+        } else if (locals.user.type == 1) {
+            if (!homeLanguage || !birthyear || !gender || !bio) {
+                return { message: 'Invalid request' };
+            }
+
+            let birthdate;
+            try {
+                birthdate = formatToUTCDate(new Date(parseInt(birthyear.toString()), 0, 30));
+            } catch (e) {
+                return { message: 'Invalid request' };
+            }
+
+            let response = await patchUserAPI(fetch, locals.user.id, {
+                home_language: homeLanguage,
+                target_language: targetLanguage,
+                gender,
+                birthdate,
+                bio
+            });
+            if (!response) return { message: 'Unknown error occurred' };
+            redirect(303, `/register/`);
+        }
+    }
+};
\ No newline at end of file
-- 
GitLab


From 3bf1612a6222d4078ab685f99c31dcdf29f58441 Mon Sep 17 00:00:00 2001
From: DavePk04 <Dave.Pikop.Pokam@ulb.be>
Date: Sat, 29 Mar 2025 15:19:04 +0100
Subject: [PATCH 4/4] fix linting

---
 .../register/[[studyId]]/+page.server.ts      | 230 +++++++++---------
 1 file changed, 115 insertions(+), 115 deletions(-)

diff --git a/frontend/src/routes/register/[[studyId]]/+page.server.ts b/frontend/src/routes/register/[[studyId]]/+page.server.ts
index 3aea7879..1649973a 100644
--- a/frontend/src/routes/register/[[studyId]]/+page.server.ts
+++ b/frontend/src/routes/register/[[studyId]]/+page.server.ts
@@ -5,118 +5,118 @@ import { validateEmail, validatePassword, validateUsername } from '$lib/utils/se
 import { redirect, type Actions } from '@sveltejs/kit';
 
 export const actions: Actions = {
-    register: async ({ request, fetch, params }) => {
-        const formData = await request.formData();
-        const studyId = params.studyId;
-        if (!studyId) return { message: 'Invalid request' };
-
-        const email = formData.get('email');
-        const nickname = formData.get('nickname');
-        const password = formData.get('password');
-        const confirmPassword = formData.get('confirmPassword');
-        const role = formData.get('role');
-
-        if (!email || !nickname || !password || !confirmPassword) {
-            return { message: 'Invalid request' };
-        }
-
-        if (!validateEmail(email)) return { message: 'Invalid email' };
-        if (!validateUsername(nickname)) return { message: 'Invalid username' };
-        if (!validatePassword(password)) return { message: 'Invalid password' };
-
-        if (password !== confirmPassword) return { message: 'Passwords do not match' };
-
-        const is_tutor = Number(role) === 1;
-
-        let response = await fetch(`/api/auth/register`, {
-            headers: {
-                'Content-Type': 'application/json'
-            },
-            method: 'POST',
-            body: JSON.stringify({ email, nickname, password, is_tutor })
-        });
-
-        if (response.status === 400) return { message: 'User already exists' };
-        if (response.status === 401) return { message: 'Failed to create user' };
-        if (response.status === 422) return { message: 'Invalid request' };
-        if (!response.ok) return { message: 'Unknown error occurred' };
-
-        response = await fetch(`/api/auth/login`, {
-            headers: {
-                'Content-Type': 'application/json'
-            },
-            method: 'POST',
-            body: JSON.stringify({ email, password })
-        });
-
-        if (response.status === 401) return { message: 'Incorrect email or password' };
-        if (response.status === 422) return { message: 'Invalid request' };
-        if (!response.ok) return { message: 'Unknown error occurred' };
-
-        return redirect(303, `/register/${studyId}`);
-    },
-    data: async ({ request, fetch, locals}) => {
-        if (!locals.user) {
-            return { message: 'Unauthorized' };
-        }
-
-        const formData = await request.formData();
-
-        const homeLanguage = formData.get('homeLanguage');
-        const targetLanguage = formData.get('targetLanguage');
-        const birthyear = formData.get('birthyear');
-        const gender = formData.get('gender');
-        const study = formData.get('study');
-        const bio = formData.get('bio');
-        let my_tutor = formData.get('myTutor');
-
-        if (locals.user.type == 2) {
-            if (!homeLanguage || !targetLanguage || !birthyear || !gender) {
-                return { message: 'Invalid request' };
-            }
-            // Fixme: I struggled to retrieve the my_tutor's value in the form (temporary fix)
-            if (!my_tutor || (my_tutor as string).trim() === '') {
-                my_tutor = '';
-            }
-
-            let birthdate;
-            try {
-                birthdate = formatToUTCDate(new Date(parseInt(birthyear.toString()), 0, 30));
-            } catch (e) {
-                return { message: 'Invalid request' };
-            }
-
-            const response = await patchUserAPI(fetch, locals.user.id, {
-                home_language: homeLanguage,
-                target_language: targetLanguage,
-                gender,
-                birthdate,
-                my_tutor: my_tutor
-            });
-            if (!response) return { message: 'Unknown error occurred' };
-
-            redirect(303, `/register/`);
-        } else if (locals.user.type == 1) {
-            if (!homeLanguage || !birthyear || !gender || !bio) {
-                return { message: 'Invalid request' };
-            }
-
-            let birthdate;
-            try {
-                birthdate = formatToUTCDate(new Date(parseInt(birthyear.toString()), 0, 30));
-            } catch (e) {
-                return { message: 'Invalid request' };
-            }
-
-            let response = await patchUserAPI(fetch, locals.user.id, {
-                home_language: homeLanguage,
-                target_language: targetLanguage,
-                gender,
-                birthdate,
-                bio
-            });
-            if (!response) return { message: 'Unknown error occurred' };
-            redirect(303, `/register/`);
-        }
-    }
-};
\ No newline at end of file
+	register: async ({ request, fetch, params }) => {
+		const formData = await request.formData();
+		const studyId = params.studyId;
+		if (!studyId) return { message: 'Invalid request' };
+
+		const email = formData.get('email');
+		const nickname = formData.get('nickname');
+		const password = formData.get('password');
+		const confirmPassword = formData.get('confirmPassword');
+		const role = formData.get('role');
+
+		if (!email || !nickname || !password || !confirmPassword) {
+			return { message: 'Invalid request' };
+		}
+
+		if (!validateEmail(email)) return { message: 'Invalid email' };
+		if (!validateUsername(nickname)) return { message: 'Invalid username' };
+		if (!validatePassword(password)) return { message: 'Invalid password' };
+
+		if (password !== confirmPassword) return { message: 'Passwords do not match' };
+
+		const is_tutor = Number(role) === 1;
+
+		let response = await fetch(`/api/auth/register`, {
+			headers: {
+				'Content-Type': 'application/json'
+			},
+			method: 'POST',
+			body: JSON.stringify({ email, nickname, password, is_tutor })
+		});
+
+		if (response.status === 400) return { message: 'User already exists' };
+		if (response.status === 401) return { message: 'Failed to create user' };
+		if (response.status === 422) return { message: 'Invalid request' };
+		if (!response.ok) return { message: 'Unknown error occurred' };
+
+		response = await fetch(`/api/auth/login`, {
+			headers: {
+				'Content-Type': 'application/json'
+			},
+			method: 'POST',
+			body: JSON.stringify({ email, password })
+		});
+
+		if (response.status === 401) return { message: 'Incorrect email or password' };
+		if (response.status === 422) return { message: 'Invalid request' };
+		if (!response.ok) return { message: 'Unknown error occurred' };
+
+		return redirect(303, `/register/${studyId}`);
+	},
+	data: async ({ request, fetch, locals }) => {
+		if (!locals.user) {
+			return { message: 'Unauthorized' };
+		}
+
+		const formData = await request.formData();
+
+		const homeLanguage = formData.get('homeLanguage');
+		const targetLanguage = formData.get('targetLanguage');
+		const birthyear = formData.get('birthyear');
+		const gender = formData.get('gender');
+		const study = formData.get('study');
+		const bio = formData.get('bio');
+		let my_tutor = formData.get('myTutor');
+
+		if (locals.user.type == 2) {
+			if (!homeLanguage || !targetLanguage || !birthyear || !gender) {
+				return { message: 'Invalid request' };
+			}
+			// Fixme: I struggled to retrieve the my_tutor's value in the form (temporary fix)
+			if (!my_tutor || (my_tutor as string).trim() === '') {
+				my_tutor = '';
+			}
+
+			let birthdate;
+			try {
+				birthdate = formatToUTCDate(new Date(parseInt(birthyear.toString()), 0, 30));
+			} catch (e) {
+				return { message: 'Invalid request' };
+			}
+
+			const response = await patchUserAPI(fetch, locals.user.id, {
+				home_language: homeLanguage,
+				target_language: targetLanguage,
+				gender,
+				birthdate,
+				my_tutor: my_tutor
+			});
+			if (!response) return { message: 'Unknown error occurred' };
+
+			redirect(303, `/register/`);
+		} else if (locals.user.type == 1) {
+			if (!homeLanguage || !birthyear || !gender || !bio) {
+				return { message: 'Invalid request' };
+			}
+
+			let birthdate;
+			try {
+				birthdate = formatToUTCDate(new Date(parseInt(birthyear.toString()), 0, 30));
+			} catch (e) {
+				return { message: 'Invalid request' };
+			}
+
+			let response = await patchUserAPI(fetch, locals.user.id, {
+				home_language: homeLanguage,
+				target_language: targetLanguage,
+				gender,
+				birthdate,
+				bio
+			});
+			if (!response) return { message: 'Unknown error occurred' };
+			redirect(303, `/register/`);
+		}
+	}
+};
-- 
GitLab