From 364846eeed0fb47046b0abf14816edb757d04ee8 Mon Sep 17 00:00:00 2001 From: April Hall Date: Mon, 24 Feb 2025 13:58:44 -0500 Subject: [PATCH] feat: Actually actually make changing usernames work 9 files changes, lord have mercy on my soul --- src/lib/components/forms/updatePFP.svelte | 2 +- .../components/forms/updatePassword.svelte | 2 +- .../components/forms/updateUsername.svelte | 16 ++---------- src/lib/components/user.svelte | 8 +++--- src/lib/server/db/sqlite.ts | 11 ++++---- src/lib/types/account.ts | 1 - src/routes/(main)/+layout.server.ts | 15 +++++++++++ src/routes/(main)/account/+page.server.ts | 26 +++++++++++++++++-- src/routes/(main)/account/+page.svelte | 7 ++--- 9 files changed, 57 insertions(+), 31 deletions(-) diff --git a/src/lib/components/forms/updatePFP.svelte b/src/lib/components/forms/updatePFP.svelte index 0896320..0721fc0 100644 --- a/src/lib/components/forms/updatePFP.svelte +++ b/src/lib/components/forms/updatePFP.svelte @@ -14,7 +14,7 @@
-
+
Upload Profile Image -
+
Update Password
diff --git a/src/lib/components/forms/updateUsername.svelte b/src/lib/components/forms/updateUsername.svelte index c172e99..286db36 100644 --- a/src/lib/components/forms/updateUsername.svelte +++ b/src/lib/components/forms/updateUsername.svelte @@ -13,8 +13,8 @@ }); - -
+ +
Update Username
@@ -28,18 +28,6 @@ /> {#if $errors.username}{$errors.username[0]}{/if}
-
- - - {#if $errors.password}{$errors.password[0]}{/if} -

{#if $message}{$message}{/if} diff --git a/src/lib/components/user.svelte b/src/lib/components/user.svelte index 276d627..650e1b9 100644 --- a/src/lib/components/user.svelte +++ b/src/lib/components/user.svelte @@ -5,18 +5,18 @@ import type { PageData } from '../../routes/(main)/$types'; const { data }: { data: PageData } = $props(); - const imageSrc = data.session?.user.image ?? `https://api.dicebear.com/9.x/identicon/svg?seed=${data.session?.user.id}`; + const imageSrc = data.user.image ?? `https://api.dicebear.com/9.x/identicon/svg?seed=${data.session?.user.id}`; -{#if data.session} +{#if data.user.username}

- Profile image for {data.session?.user.name} + Profile image for {data.user.username}
-

{data.session?.user.name}

+

{data.user.username}

diff --git a/src/lib/server/db/sqlite.ts b/src/lib/server/db/sqlite.ts index 8b9d076..5064eb3 100644 --- a/src/lib/server/db/sqlite.ts +++ b/src/lib/server/db/sqlite.ts @@ -13,12 +13,13 @@ class AuthDb { this.client.pragma('journal_mode = WAL'); } + setUserName(userId: string, newUsername: string) { + this.client.prepare('UPDATE user SET username = ? WHERE id = ?').run(newUsername, userId); + console.log('wam bam'); + } + setUserImage(userId: string, image: string) { - try { - this.client.prepare('UPDATE user SET image = ? WHERE id = ?').run(image, userId); - } catch (e) { - console.error(`Error setting user image: ${(e as Error).message}`); - } + this.client.prepare('UPDATE user SET image = ? WHERE id = ?').run(image, userId); } getUser(userId: string): Profile { diff --git a/src/lib/types/account.ts b/src/lib/types/account.ts index 2aeab2d..fffbbf6 100644 --- a/src/lib/types/account.ts +++ b/src/lib/types/account.ts @@ -27,7 +27,6 @@ export const changeUsernameSchema = z.object({ .max(15, 'Username must be no more than 15 characters.') .regex(/^(?![A-Z])/gm, 'Username cannot contain uppercase letters') .regex(/^(?=[a-z0-9-_]+$)/gm, 'Username cannot contain special characters'), - password: z.string().nonempty('Password must not be empty.'), }); export type ChangePasswordSchema = typeof changePasswordSchema; diff --git a/src/routes/(main)/+layout.server.ts b/src/routes/(main)/+layout.server.ts index 7a9516a..09721bc 100644 --- a/src/routes/(main)/+layout.server.ts +++ b/src/routes/(main)/+layout.server.ts @@ -1,9 +1,15 @@ import { db } from '$lib/server/db'; import { auth } from '$lib/server/db/auth'; +import { authdb } from '$lib/server/db/sqlite.js'; import { newChannelSchema } from '$lib/types/misc'; import { superValidate } from 'sveltekit-superforms'; import { zod } from 'sveltekit-superforms/adapters'; +interface Profile { + username: string; + image: string; +} + export async function load({ request }) { const form = await superValidate(zod(newChannelSchema)); const rows = await db.getChannels(); @@ -17,8 +23,17 @@ export async function load({ request }) { headers: request.headers, }); + let user: Profile; + + if (session?.user.id) { + user = authdb.getUser(session.user.id); + } else { + throw new Error('No user ID found.'); + } + return { session, + user, channels, form, }; diff --git a/src/routes/(main)/account/+page.server.ts b/src/routes/(main)/account/+page.server.ts index 8406727..cc343c5 100644 --- a/src/routes/(main)/account/+page.server.ts +++ b/src/routes/(main)/account/+page.server.ts @@ -5,6 +5,7 @@ import { zod } from 'sveltekit-superforms/adapters'; import { auth } from '$lib/server/db/auth'; import { changeUsernameSchema, changePasswordSchema } from '$lib/types/account'; import type { APIError } from 'better-auth/api'; +import { authdb } from '$lib/server/db/sqlite.js'; export async function load({ request }) { const session = await auth.api.getSession({ @@ -50,10 +51,31 @@ export const actions = { return message(newpassForm, 'Password updated.'); }, updateUsername: async ({ request }) => { + const session = await auth.api.getSession({ + headers: request.headers, + }); const newuserForm = await superValidate(request, zod(changeUsernameSchema)); - if (!newuserForm.valid) { - return fail(400, { newuserForm }); + try { + if (!newuserForm.valid) { + return fail(400, { newuserForm }); + } + + if (session?.user.id) { + if (authdb.getUser(session.user.id).username !== newuserForm.data.username) { + authdb.setUserName(session.user.id, newuserForm.data.username); + } else { + throw new Error('New username cannot be the same as old username.'); + } + } else { + throw new Error('No user ID found.'); + } + } catch (e) { + const errorMessage = (e as Error).message; + if (errorMessage === 'UNIQUE constraint failed: user.username') { + return setError(newuserForm, 'username', 'Username taken.'); + } + return setError(newuserForm, 'username', errorMessage.charAt(0).toUpperCase() + errorMessage.slice(1)); } return message(newuserForm, 'Username updated.'); diff --git a/src/routes/(main)/account/+page.svelte b/src/routes/(main)/account/+page.svelte index e5059bd..4a9a070 100644 --- a/src/routes/(main)/account/+page.svelte +++ b/src/routes/(main)/account/+page.svelte @@ -1,12 +1,13 @@ @@ -23,7 +24,7 @@
-
+
Account Actions