use zod for register verification

This commit is contained in:
2024-10-19 15:27:29 +02:00
parent 18135a0816
commit aa91eaf82a
5 changed files with 58 additions and 47 deletions

View File

@ -4,6 +4,7 @@
import { createEventDispatcher, onMount } from 'svelte';
import { env } from '$env/dynamic/public';
import { rulesShort } from '$lib/rules';
import { RegisterSchema } from './schema';
const dispatch = createEventDispatcher();
@ -40,21 +41,18 @@
async function sendRegister() {
// eslint-disable-next-line no-async-promise-executor
registerRequest = new Promise<void>(async (resolve, reject) => {
if (
(birthdayInput.valueAsDate || new Date()) >
new Date(Date.now() - 1000 * 60 * 60 * 24 * 365 * 6)
) {
reject(
Error(
'Bitte gib Deinen vollständigen Geburtstag und die korrekte Jahreszahl an. Du musst mindestens 6 Jahre alt sein.\n'
)
);
const parseResult = RegisterSchema.safeParse(
Object.fromEntries(new FormData(document.forms[0]))
);
if (!parseResult.success) {
reject(Error(parseResult.error.issues.map((i) => i.message).join('\n\n')));
return;
}
const response = await fetch(`${env.PUBLIC_BASE_PATH}/register`, {
method: 'POST',
body: new FormData(document.forms[0])
body: JSON.stringify(Object.fromEntries(new FormData(document.forms[0])))
});
if (response.ok) {
dispatch('submit', {
@ -80,7 +78,7 @@
let rulesAccepted = false;
let rulesModal: HTMLDialogElement;
let rulesModalSecondsOpened = 0;
let rulesModalTimer: number | null = null;
let rulesModalTimer: number | NodeJS.Timeout | undefined = undefined;
let inputsInvalidMessage: string | null = 'Bitte fülle alle erforderlichen Felder aus';
let registerRequest: Promise<void> | null = null;
@ -248,7 +246,7 @@
class="modal"
on:close={() => {
clearInterval(rulesModalTimer);
rulesModalTimer = null;
rulesModalTimer = undefined;
}}
bind:this={rulesModal}
>