diff --git a/components/cms/CmsMitglieder.vue b/components/cms/CmsMitglieder.vue
index cbb07cb..86b1ca4 100644
--- a/components/cms/CmsMitglieder.vue
+++ b/components/cms/CmsMitglieder.vue
@@ -182,9 +182,9 @@
🔑
@@ -263,8 +263,9 @@
{{ member.name }}
🔑
diff --git a/pages/mitgliederbereich/mitglieder.vue b/pages/mitgliederbereich/mitglieder.vue
index 0d8de08..9264a31 100644
--- a/pages/mitgliederbereich/mitglieder.vue
+++ b/pages/mitgliederbereich/mitglieder.vue
@@ -189,9 +189,9 @@
|
🔑
@@ -278,8 +278,9 @@
🔑
diff --git a/server/api/members.get.js b/server/api/members.get.js
index 6550998..a605d83 100644
--- a/server/api/members.get.js
+++ b/server/api/members.get.js
@@ -28,17 +28,6 @@ export default defineEventHandler(async (event) => {
const manualMembers = await readMembers()
const registeredUsers = await readUsers()
- // Debug: Log alle geladenen Mitglieder (decryptet)
- console.log('--- DEBUG: Decrypted manualMembers ---')
- if (Array.isArray(manualMembers)) {
- for (const m of manualMembers) {
- console.log(JSON.stringify(m, null, 2))
- }
- console.log('--- Gesamt:', manualMembers.length, 'Mitglieder ---')
- } else {
- console.log('manualMembers ist kein Array:', manualMembers)
- }
-
// Merge members: combine manual + registered, detect duplicates
const mergedMembers = []
@@ -46,11 +35,19 @@ export default defineEventHandler(async (event) => {
const emailToIndexMap = new Map() // email -> index in mergedMembers
const nameToIndexMap = new Map() // name -> index in mergedMembers
- // First, add manual members that are active/accepted (filter out pending applications)
+ // First, add manual members. Legacy records without explicit status flags
+ // are treated as accepted members; only explicit non-accepted records are skipped.
for (let i = 0; i < manualMembers.length; i++) {
const member = manualMembers[i]
- // Normalize acceptance flags: accept if member.active===true or member.status==='accepted' or member.accepted===true
- const isAccepted = member.active === true || (member.status && String(member.status).toLowerCase() === 'accepted') || member.accepted === true
+ const normalizedStatus = member.status ? String(member.status).toLowerCase() : ''
+ const hasExplicitAcceptanceFlag = member.active !== undefined || member.accepted !== undefined || normalizedStatus !== ''
+ const isAccepted = hasExplicitAcceptanceFlag
+ ? (
+ member.active === true ||
+ member.accepted === true ||
+ normalizedStatus === 'accepted'
+ )
+ : true
if (!isAccepted) {
// Skip applications that are not yet accepted
continue
diff --git a/tests/members-endpoints.spec.ts b/tests/members-endpoints.spec.ts
index 0951e97..f2f7b68 100644
--- a/tests/members-endpoints.spec.ts
+++ b/tests/members-endpoints.spec.ts
@@ -64,7 +64,7 @@ describe('Members API Endpoints', () => {
const event = createEvent({ cookies: { auth_token: 'token' } })
authUtils.verifyToken.mockReturnValue({ id: '1' })
memberUtils.readMembers.mockResolvedValue([
- { id: 'm1', firstName: 'Anna', lastName: 'Muster', email: 'anna@club.de', hasHallKey: true, active: true }
+ { id: 'm1', firstName: 'Anna', lastName: 'Muster', email: 'anna@club.de', hasHallKey: true }
])
authUtils.readUsers.mockResolvedValue([
{ id: 'u1', name: 'Ben Nutzer', email: 'ben@club.de', role: 'mitglied', active: true }
@@ -77,6 +77,23 @@ describe('Members API Endpoints', () => {
expect(response.members).toHaveLength(2)
expect(response.members[0]).toHaveProperty('hasHallKey', true)
})
+
+ it('zeigt Legacy-Mitglieder ohne active-Flag weiterhin an', async () => {
+ const event = createEvent({ cookies: { auth_token: 'token' } })
+ authUtils.verifyToken.mockReturnValue({ id: '1' })
+ memberUtils.readMembers.mockResolvedValue([
+ { id: 'm1', firstName: 'Anna', lastName: 'Muster', geburtsdatum: '2000-01-01' },
+ { id: 'm2', firstName: 'Offen', lastName: 'Antrag', geburtsdatum: '2001-01-01', status: 'pending' }
+ ])
+ authUtils.readUsers.mockResolvedValue([])
+ authUtils.getUserFromToken.mockResolvedValue({ id: '1', role: 'mitglied' })
+
+ const response = await membersGetHandler(event)
+
+ expect(response.success).toBe(true)
+ expect(response.members).toHaveLength(1)
+ expect(response.members[0].name).toBe('Anna Muster')
+ })
})
describe('POST /api/members', () => {
|