aboutsummaryrefslogtreecommitdiffstats
path: root/website/src/routes/welcome/+page.server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'website/src/routes/welcome/+page.server.ts')
-rw-r--r--website/src/routes/welcome/+page.server.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/website/src/routes/welcome/+page.server.ts b/website/src/routes/welcome/+page.server.ts
new file mode 100644
index 0000000..503f361
--- /dev/null
+++ b/website/src/routes/welcome/+page.server.ts
@@ -0,0 +1,38 @@
+import { fail, redirect } from '@sveltejs/kit';
+import type { Actions, PageServerLoad } from './$types';
+import { profileSchema } from '$lib/schemas/profile';
+
+export const actions: Actions = {
+ default: async ({ request, fetch }) => {
+ console.log("hello");
+ const formData = await request.formData();
+ const data = Object.fromEntries(formData);
+
+ // 1. Zod Validation
+ const result = profileSchema.safeParse(data);
+
+ if (!result.success) {
+ return fail(400, {
+ errors: result.error.flatten().fieldErrors,
+ data: data as Record<string, string>
+ });
+ }
+
+ // 2. Example: Check availability against your backend
+ // Replace this with your actual backend URL
+ const response = await fetch(`/api/check-username?u=${result.data.username}`);
+ const { available } = await response.json();
+
+ if (!available) {
+ return fail(400, {
+ errors: { username: ["This username is already taken"] },
+ data: data as Record<string, string>
+ });
+ }
+
+ // 3. Success: Send to backend to create profile
+ // await fetch('...', { method: 'POST', body: JSON.stringify(result.data) });
+
+ throw redirect(303, '/dashboard');
+ }
+};