From 0fb58af194f6012d0d97df513e8735869b5d5d71 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Tue, 31 Mar 2026 07:25:44 +0200 Subject: [PATCH] Add birthdate handling in member registration and management. Update UI to conditionally require birthdate for new members, and enhance API to enforce birthdate validation. Improve tests to cover new birthdate requirements. --- components/cms/CmsMitglieder.vue | 8 +++++-- pages/mitgliederbereich/mitglieder.vue | 8 +++++-- pages/mitgliederbereich/profil.vue | 3 ++- pages/registrieren.vue | 33 ++++++++++++++++++++++++++ server/api/auth/register.post.js | 10 +++++--- server/api/members.get.js | 2 ++ server/api/members.post.js | 4 ++-- tests/auth-endpoints.spec.ts | 22 +++++++++++++++-- tests/members-endpoints.spec.ts | 20 ++++++++++++++++ 9 files changed, 98 insertions(+), 12 deletions(-) diff --git a/components/cms/CmsMitglieder.vue b/components/cms/CmsMitglieder.vue index d53664a..68ac93d 100644 --- a/components/cms/CmsMitglieder.vue +++ b/components/cms/CmsMitglieder.vue @@ -469,12 +469,12 @@

- Wird zur eindeutigen Identifizierung benötigt + Fuer neue Mitglieder erforderlich. Altdaten ohne Geburtsdatum koennen weiter bearbeitet werden.

@@ -811,6 +811,10 @@ const canViewContactData = computed(() => { return authStore.hasRole('vorstand') }) +const isBirthdateRequired = computed(() => { + return !editingMember.value || Boolean(editingMember.value?.geburtsdatum) +}) + const filteredMembers = computed(() => { if (!filterHasHallKey.value) return members.value return members.value.filter(member => member.hasHallKey) diff --git a/pages/mitgliederbereich/mitglieder.vue b/pages/mitgliederbereich/mitglieder.vue index 470065c..6b805bc 100644 --- a/pages/mitgliederbereich/mitglieder.vue +++ b/pages/mitgliederbereich/mitglieder.vue @@ -472,12 +472,12 @@

- Wird zur eindeutigen Identifizierung benötigt + Fuer neue Mitglieder erforderlich. Altdaten ohne Geburtsdatum koennen weiter bearbeitet werden.

@@ -937,6 +937,10 @@ const canViewContactData = computed(() => { return authStore.hasRole('vorstand') }) +const isBirthdateRequired = computed(() => { + return !editingMember.value || Boolean(editingMember.value?.geburtsdatum) +}) + const loadMembers = async () => { isLoading.value = true try { diff --git a/pages/mitgliederbereich/profil.vue b/pages/mitgliederbereich/profil.vue index f499ef8..3898e0c 100644 --- a/pages/mitgliederbereich/profil.vue +++ b/pages/mitgliederbereich/profil.vue @@ -306,7 +306,8 @@ const formData = ref({ const visibility = ref({ showEmail: true, showPhone: true, - showAddress: false + showAddress: false, + showBirthday: true }) const passwordData = ref({ diff --git a/pages/registrieren.vue b/pages/registrieren.vue index 0e0e9f5..3b2baad 100644 --- a/pages/registrieren.vue +++ b/pages/registrieren.vue @@ -106,6 +106,31 @@ > +
+ + +
+ + +