Implement member management enhancements; add bulk import functionality and duplicate checking based on geburtsdatum. Update API to support new fields and improve error handling for member data submissions. Refactor member-related components for better user experience and data validation.
This commit is contained in:
@@ -3,12 +3,21 @@ import { saveMember } from '../utils/members.js'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
const token = getCookie(event, 'auth_token')
|
||||
// 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.'
|
||||
message: 'Nicht authentifiziert. Bitte Token im Cookie oder Authorization-Header bereitstellen.'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -23,16 +32,23 @@ export default defineEventHandler(async (event) => {
|
||||
|
||||
const user = await getUserById(decoded.id)
|
||||
|
||||
// Only admin and vorstand can edit members
|
||||
if (!user || (user.role !== 'admin' && user.role !== 'vorstand')) {
|
||||
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 Bearbeiten von Mitgliedern.'
|
||||
message: 'Keine Berechtigung zum Hinzufügen/Bearbeiten von Mitgliedern. Erforderlich: admin oder vorstand Rolle.'
|
||||
})
|
||||
}
|
||||
|
||||
const body = await readBody(event)
|
||||
const { id, firstName, lastName, email, phone, address, notes } = body
|
||||
const { id, firstName, lastName, geburtsdatum, email, phone, address, notes } = body
|
||||
|
||||
if (!firstName || !lastName) {
|
||||
throw createError({
|
||||
@@ -41,23 +57,51 @@ export default defineEventHandler(async (event) => {
|
||||
})
|
||||
}
|
||||
|
||||
await saveMember({
|
||||
id: id || undefined,
|
||||
firstName,
|
||||
lastName,
|
||||
email: email || '',
|
||||
phone: phone || '',
|
||||
address: address || '',
|
||||
notes: notes || ''
|
||||
})
|
||||
if (!geburtsdatum) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: 'Geburtsdatum ist erforderlich, um Duplikate zu vermeiden.'
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Mitglied erfolgreich gespeichert.'
|
||||
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)
|
||||
throw 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.'
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user