From a0646b806bec733bc495934046e50681a061677b Mon Sep 17 00:00:00 2001 From: "Gard.Kalland" Date: Mon, 5 May 2025 14:28:28 +0200 Subject: [PATCH 1/4] delete button --- .../components/cards/UserDetailModal.svelte | 35 ++++++++++++++++ apps/www/src/lib/services/user.service.ts | 7 ++++ .../portal/admin/user/[id]/+page.server.ts | 41 ++++++++++++++++--- 3 files changed, 78 insertions(+), 5 deletions(-) diff --git a/apps/www/src/lib/components/cards/UserDetailModal.svelte b/apps/www/src/lib/components/cards/UserDetailModal.svelte index 85ae2848..9ad74e3b 100644 --- a/apps/www/src/lib/components/cards/UserDetailModal.svelte +++ b/apps/www/src/lib/components/cards/UserDetailModal.svelte @@ -19,6 +19,8 @@ let roleForm = $state(null); let unclaimedBeers = $state(null); let unclaimedBeersState = $state<'idle' | 'loading' | 'success' | 'error'>('idle'); + let showDeleteSection = $state(false); + let deleteText = $state(''); onMount(async () => { const response = await fetch(`/portal/admin/user/${selectedUser.id}`); @@ -130,5 +132,38 @@ +
+ + + {#if showDeleteSection} +
+
{ + return ({ result }) => { + if (result.type === 'success') { + onClose(); + } + }; + }} + > +
+

Skriv {selectedUser.name} for å bekrefte

+
+
+ +
+ +
+
+
+
+ {/if} +
diff --git a/apps/www/src/lib/services/user.service.ts b/apps/www/src/lib/services/user.service.ts index 3818a4c1..5c1f83aa 100644 --- a/apps/www/src/lib/services/user.service.ts +++ b/apps/www/src/lib/services/user.service.ts @@ -45,4 +45,11 @@ export class UserService { return user; } + async deleteUser(userId: string) { + return await this.#db + .delete(users) + .where(eq(users.id, userId)) + .returning() + .then((rows) => rows[0]); + } } diff --git a/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts b/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts index 2cee5a6b..7ef8b69b 100644 --- a/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts +++ b/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts @@ -1,28 +1,59 @@ -import { fail } from '@sveltejs/kit'; +import { fail, redirect } from '@sveltejs/kit'; import type { Actions } from './$types'; export const actions: Actions = { addBeers: async ({ params, request, locals }) => { const userId = params.id; - if (!locals.user || locals.user.role !== 'board') { return fail(401, { success: false, message: 'Unauthorized' }); } - const formData = await request.formData(); const additionalBeers = +Number(formData.get('additionalBeers')); - const success = await locals.beerService.updateBeers(userId, additionalBeers); - if (!success) { return fail(400, { success: false, message: 'Failed to update beers' }); } + return { success: true }; + }, + + deleteUser: async ({ params, request, locals }) => { + const userId = params.id; + + if (!locals.user || locals.user.role !== 'board') { + return fail(401, { + success: false, + message: 'Unauthorized' + }); + } + + const formData = await request.formData(); + const confirmDelete = formData.get('confirmDelete')?.toString(); + + const user = await locals.userService.findById(userId); + if (confirmDelete !== user?.name) { + return fail(400, { + success: false, + message: "Names dosen't match" + }); + } + const success = await locals.userService.deleteUser(userId); + const invID = await locals.invitationService.findByEmail(user?.email); + console.log(invID); + const invsuccess = await locals.invitationService.delete(invID?.id); + console.log(invsuccess); + + if (!success || !invsuccess) { + return fail(400, { + success: false, + message: 'Failed to delete user' + }); + } return { success: true }; } From d3be5e7afe983744bcf9cbf13596fa80ec13151b Mon Sep 17 00:00:00 2001 From: "Gard.Kalland" Date: Mon, 5 May 2025 15:53:46 +0200 Subject: [PATCH 2/4] fixed undefined --- .../routes/portal/admin/user/[id]/+page.server.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts b/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts index 7ef8b69b..8a2702ec 100644 --- a/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts +++ b/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts @@ -43,12 +43,14 @@ export const actions: Actions = { }); } const success = await locals.userService.deleteUser(userId); - const invID = await locals.invitationService.findByEmail(user?.email); - console.log(invID); - const invsuccess = await locals.invitationService.delete(invID?.id); - console.log(invsuccess); - if (!success || !invsuccess) { + const invId = await locals.invitationService.findByEmail(user.email); + + if (invId) { + await locals.invitationService.delete(invID.id); + } + + if (!success) { return fail(400, { success: false, message: 'Failed to delete user' From 8702e42207c55145dd20ac23103da14ab90695f6 Mon Sep 17 00:00:00 2001 From: "Gard.Kalland" Date: Mon, 5 May 2025 15:55:37 +0200 Subject: [PATCH 3/4] fixed spelling --- apps/www/src/routes/portal/admin/user/[id]/+page.server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts b/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts index 8a2702ec..642466f8 100644 --- a/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts +++ b/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts @@ -47,7 +47,7 @@ export const actions: Actions = { const invId = await locals.invitationService.findByEmail(user.email); if (invId) { - await locals.invitationService.delete(invID.id); + await locals.invitationService.delete(invId.id); } if (!success) { From a013603d9117474b7b4bc5d301b6a8a16655cd62 Mon Sep 17 00:00:00 2001 From: "Gard.Kalland" Date: Mon, 5 May 2025 15:59:12 +0200 Subject: [PATCH 4/4] format && lint --- apps/www/src/routes/portal/admin/user/[id]/+page.server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts b/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts index 642466f8..edafe6c7 100644 --- a/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts +++ b/apps/www/src/routes/portal/admin/user/[id]/+page.server.ts @@ -1,4 +1,4 @@ -import { fail, redirect } from '@sveltejs/kit'; +import { fail } from '@sveltejs/kit'; import type { Actions } from './$types'; export const actions: Actions = {