diff --git a/src/lib/server/userService.ts b/src/lib/server/userService.ts index 80c41ae..3e78f5b 100644 --- a/src/lib/server/userService.ts +++ b/src/lib/server/userService.ts @@ -32,5 +32,23 @@ export const addUser = (userName: string, userPassword: string): number => { return rowCount; }; -export const deleteUser = () => { +export const deleteUser = (userId: string) => { + // make sure to not delete the last entry + const deleteUserSQLStmt = `DELETE + FROM users + WHERE id = ? + AND (SELECT COUNT(*) FROM users) > 1;`; + + const statement = db.prepare(deleteUserSQLStmt); + + let rowCount; + try { + const info = statement.run(userId); + rowCount = info.changes; + } catch (error) { + console.log(error); + rowCount = 0; + } + + return rowCount; }; diff --git a/src/routes/(angemeldet)/user-management/+page.svelte b/src/routes/(angemeldet)/user-management/+page.svelte index 24fa530..d9875c8 100644 --- a/src/routes/(angemeldet)/user-management/+page.svelte +++ b/src/routes/(angemeldet)/user-management/+page.svelte @@ -65,8 +65,21 @@ }, 5000); } - async function deleteUser() { + async function deleteUser(userId: number) { + const URL = `/api/users/${userId}`; + const response = await fetch(URL, { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json' + } + }) + + if (response.status == 204) { + userList = await getUsers(); + } else { + alert("Nutzer konnte nicht gelöscht werden") + } } diff --git a/src/routes/api/users/[user]/+server.ts b/src/routes/api/users/[user]/+server.ts new file mode 100644 index 0000000..704ae19 --- /dev/null +++ b/src/routes/api/users/[user]/+server.ts @@ -0,0 +1,13 @@ +import { json } from '@sveltejs/kit'; +import { deleteUser } from '$lib/server/userService'; + +export async function DELETE({ params, locals }) { + if (!locals.user) { + return json({ error: 'Unauthorized' }, { status: 401 }); + } + + const userId = params.user; + const rowCount = deleteUser(userId); + + return new Response(null, { status: rowCount == 1 ? 204 : 400 }); +}