From 10b1c01d516aed166a0ba113f3dd45de9cf1fa9d Mon Sep 17 00:00:00 2001 From: bytedream Date: Tue, 29 Aug 2023 04:23:03 +0200 Subject: [PATCH] add admin user page --- src/lib/components/Input/Input.svelte | 13 +- src/lib/components/Input/Select.svelte | 2 +- src/routes/admin/+layout.svelte | 6 + src/routes/admin/admin/+page.server.ts | 8 +- src/routes/admin/admin/+page.svelte | 12 +- src/routes/admin/users/+page.server.ts | 11 + src/routes/admin/users/+page.svelte | 290 +++++++++++++++++++++++++ src/routes/admin/users/+server.ts | 77 +++++++ 8 files changed, 402 insertions(+), 17 deletions(-) create mode 100644 src/routes/admin/users/+page.server.ts create mode 100644 src/routes/admin/users/+page.svelte create mode 100644 src/routes/admin/users/+server.ts diff --git a/src/lib/components/Input/Input.svelte b/src/lib/components/Input/Input.svelte index c810459..6a1253f 100644 --- a/src/lib/components/Input/Input.svelte +++ b/src/lib/components/Input/Input.svelte @@ -1,7 +1,6 @@ - - + +
+
+ + + + + {/each} + + + + {#key currentPageUsersRequest} + {#await currentPageUsersRequest} + {#each Array(usersPerPage) as _, i} + + + + + + + + + + + + + {/each} + {:then _} + {#each currentPageUsers as user, i} + + + + + + + + + + + + + {/each} + {/await} + {/key} + +
+ {#each headers as header} + + + +
{i + 1}
+
{i + 1} + + + + + (user.birthday = e.detail.target.valueAsDate.toISOString())} + disabled={!user.edit} + size="sm" + /> + + + + + + + + + + + +
+ {#if user.edit} + + + {:else} + + + {/if} +
+
+
+
+
+ {#each Array(Math.ceil(data.count / usersPerPage) || 1) as _, i} + + {/each} +
+
+
diff --git a/src/routes/admin/users/+server.ts b/src/routes/admin/users/+server.ts new file mode 100644 index 0000000..62ee1f7 --- /dev/null +++ b/src/routes/admin/users/+server.ts @@ -0,0 +1,77 @@ +import { getSession } from '$lib/server/session'; +import { Permissions } from '$lib/permissions'; +import type { RequestHandler } from '@sveltejs/kit'; +import { Admin, User } from '$lib/server/database'; + +export const POST = (async ({ request, cookies }) => { + if (getSession(cookies, { permissions: [Permissions.UserRead] }) == null) { + return new Response(null, { + status: 401 + }); + } + + const data = await request.json(); + const limit = data['limit'] || 100; + const from = data['from'] || 0; + + const users = await User.findAll({ offset: from, limit: limit }); + + return new Response(JSON.stringify(users)); +}) satisfies RequestHandler; + +export const PATCH = (async ({ request, cookies }) => { + if (getSession(cookies, { permissions: [Permissions.UserWrite] }) == null) { + return new Response(null, { + status: 401 + }); + } + + const data = await request.json(); + const id = data['id'] as string | null; + + if (id == null) { + return new Response(null, { + status: 400 + }); + } + + const user = await User.findOne({ where: { id: id } }); + if (!user) { + return new Response(null, { + status: 400 + }); + } + + if (data['firstname']) user.firstname = data['firstname']; + if (data['lastname']) user.lastname = data['lastname']; + if (data['birthday']) user.birthday = data['birthday']; + if (data['telephone']) user.telephone = data['telephone']; + if (data['username']) user.username = data['username']; + if (data['playertype']) user.playertype = data['playertype']; + if (data['password']) user.password = data['password']; + if (data['uuid']) user.uuid = data['uuid']; + await user.save(); + + return new Response(); +}) satisfies RequestHandler; + +export const DELETE = (async ({ request, cookies }) => { + if (getSession(cookies, { permissions: [Permissions.UserWrite] }) == null) { + return new Response(null, { + status: 401 + }); + } + + const data = await request.json(); + const id = (data['id'] as number) || null; + + if (id == null) { + return new Response(null, { + status: 400 + }); + } + + await User.destroy({ where: { id: id } }); + + return new Response(); +}) satisfies RequestHandler;