import { verifyToken, getUserById } from '../utils/auth.js' import { saveMember } from '../utils/members.js' export default defineEventHandler(async (event) => { try { // Support both Cookie and Authorization Header let token = getCookie(event, 'auth_token') // If no cookie token, try Authorization header (Bearer token) if (!token) { const authHeader = getHeader(event, 'authorization') if (authHeader && authHeader.startsWith('Bearer ')) { token = authHeader.substring(7) } } if (!token) { throw createError({ statusCode: 401, message: 'Nicht authentifiziert. Bitte Token im Cookie oder Authorization-Header bereitstellen.' }) } const decoded = verifyToken(token) if (!decoded) { throw createError({ statusCode: 401, message: 'Ungültiges Token.' }) } const user = await getUserById(decoded.id) if (!user) { throw createError({ statusCode: 401, message: 'Benutzer nicht gefunden.' }) } // Only admin and vorstand can add/edit members if (user.role !== 'admin' && user.role !== 'vorstand') { throw createError({ statusCode: 403, message: 'Keine Berechtigung zum Hinzufügen/Bearbeiten von Mitgliedern. Erforderlich: admin oder vorstand Rolle.' }) } const body = await readBody(event) const { id, firstName, lastName, geburtsdatum, email, phone, address, notes } = body if (!firstName || !lastName) { throw createError({ statusCode: 400, message: 'Vorname und Nachname sind erforderlich.' }) } if (!geburtsdatum) { throw createError({ statusCode: 400, message: 'Geburtsdatum ist erforderlich, um Duplikate zu vermeiden.' }) } try { await saveMember({ id: id || undefined, firstName, lastName, geburtsdatum: geburtsdatum || '', email: email || '', phone: phone || '', address: address || '', notes: notes || '' }) return { success: true, message: 'Mitglied erfolgreich gespeichert.' } } catch (memberError) { // Check if it's a duplicate error if (memberError.message && memberError.message.includes('existiert bereits')) { throw createError({ statusCode: 409, message: memberError.message }) } // Re-throw other errors throw memberError } } catch (error) { console.error('Fehler beim Speichern des Mitglieds:', error) // If it's already a createError, re-throw it if (error.statusCode) { throw error } // Otherwise wrap it throw createError({ statusCode: error.statusCode || 500, message: error.message || 'Fehler beim Speichern des Mitglieds.' }) } })