From cc469f67a5c13c9dc0ff6216e2191e335724253f Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Wed, 5 Nov 2025 12:19:34 +0100 Subject: [PATCH] allow for addition of Vorgaenge on Vorgang overview --- src/lib/server/vorgangService.ts | 26 +++++ src/routes/(angemeldet)/list/+page.server.ts | 24 +++- src/routes/(angemeldet)/list/+page.svelte | 110 ++++++++++++++++++- 3 files changed, 157 insertions(+), 3 deletions(-) diff --git a/src/lib/server/vorgangService.ts b/src/lib/server/vorgangService.ts index dc85f84..3cf016e 100644 --- a/src/lib/server/vorgangService.ts +++ b/src/lib/server/vorgangService.ts @@ -1,6 +1,7 @@ import { fail } from '@sveltejs/kit'; import { BUCKET, client, CONFIGFILENAME, TOKENFILENAME } from '$lib/minio'; import { checkIfExactDirectoryExists, getContentOfTextObject } from './s3ClientService'; +import { v4 as uuidv4 } from 'uuid'; import { db } from './dbService'; @@ -45,6 +46,31 @@ export const getVorgangByToken = ( return result; }; +/** + * Create Vorgang, using a vorgangName and vorgangPIN + * @param vorgangName + * @param vorgangPIN + * @returns {string || false} vorgangToken if successful + */ +export const createVorgang = (vorgangName: string, vorgangPIN: string): string | boolean => { + const vorgangExists = vorgangNameExists(vorgangName); + if (vorgangExists) { + return false; + } + + const vorgangToken = uuidv4(); + + const insertSQLStatement = `INSERT INTO cases (token, name, pin) VALUES (?, ?, ?)`; + const statement = db.prepare(insertSQLStatement); + const info = statement.run(vorgangToken, vorgangName, vorgangPIN); + + if (info.changes) { + return vorgangToken; + } else { + return false; + } +}; + /** * Get Vorgang * @param vorgangName diff --git a/src/routes/(angemeldet)/list/+page.server.ts b/src/routes/(angemeldet)/list/+page.server.ts index ab89231..af7e6c6 100644 --- a/src/routes/(angemeldet)/list/+page.server.ts +++ b/src/routes/(angemeldet)/list/+page.server.ts @@ -1,6 +1,6 @@ -import { getVorgaenge } from '$lib/server/vorgangService'; +import { createVorgang, getVorgaenge } from '$lib/server/vorgangService'; import type { PageServerLoad } from '../../(token-based)/view/$types'; -import { error } from '@sveltejs/kit'; +import { error, fail } from '@sveltejs/kit'; export const load: PageServerLoad = async (event) => { if (!event.locals.user) { @@ -13,3 +13,23 @@ export const load: PageServerLoad = async (event) => { vorgangList }; }; + + +export const actions = { + default: async ({ request }: { request: Request }) => { + const data = await request.formData(); + const vorgangName: string | null = data.get('vorgang') as string; + const vorgangPIN: string | null = data.get('pin') as string; + + const err = {}; + + const token = createVorgang(vorgangName, vorgangPIN); + if (!token) { + err.message = "Der Vorgang konnte nicht angelegt werden" + return fail(400, err) + } else { + // success + return { token } + } + } +}; \ No newline at end of file diff --git a/src/routes/(angemeldet)/list/+page.svelte b/src/routes/(angemeldet)/list/+page.svelte index 1a7f888..45892dc 100644 --- a/src/routes/(angemeldet)/list/+page.svelte +++ b/src/routes/(angemeldet)/list/+page.svelte @@ -4,12 +4,62 @@ import EmptyList from '$lib/components/EmptyList.svelte'; import { API_ROUTES, ROUTE_NAMES } from '../../index.js'; - let { data } = $props(); + let { data, form } = $props(); let vorgangList = data.vorgangList; let isEmptyList = vorgangList.length === 0; + let vorgangName = $state(''); + let vorgangPIN = $state(''); + let errorMsg = $state(''); + + // reset input fields when submission successful + $effect(() => { + if (form?.token) { + vorgangName = ''; + vorgangPIN = ''; + errorMsg = ''; + } + }); + + async function submitVorgang(ev: Event) { + const isValid = inputValid(vorgangName, vorgangPIN); + if (!isValid) { + ev.preventDefault(); + return; + } + + // continue form action on server + } + + /** + * Check for required fields + * @param vorgangName + * @param vorgangPIN + * @returns {boolean} Indicates whether input is valid + */ + function inputValid(vorgangName, vorgangPIN) { + if (!(vorgangName || vorgangPIN)) { + errorMsg = 'Bitte beide Felder ausfüllen.'; + return false; + } else if (!vorgangName) { + errorMsg = 'Bitte einen Vorgangsnamen vergeben.'; + return false; + } else if (!vorgangPIN) { + errorMsg = 'Bitte einen Vorgangs-PIN eingeben.'; + return false; + } + + const existing = vorgangList.some((vorg) => vorg.vorgangName === vorgangName); + if (existing) { + errorMsg = 'Der Name existiert bereits.'; + return false; + } + + return true; + } + async function delete_item(ev: Event) { let delete_item = window.confirm('Bist du sicher?'); @@ -80,6 +130,64 @@ +
+
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+ + {#if errorMsg} +

{errorMsg}

+ {/if} + {#if form?.message} +

{form.message}

+ {/if} + +
+