Übersicht über alle verfügbaren API-Endpoints und deren Verwendung
Alle API-Endpoints erfordern Authentifizierung (außer Login). Es werden zwei Methoden unterstützt:
Nach dem Login über /api/auth/login wird automatisch ein Cookie gesetzt.
Header: Authorization: Bearer <token>
Der Token wird im Login-Response im Feld token zurückgegeben.
Benutzer einloggen und Token erhalten
Request Body:
{
"email": "benutzer@example.com",
"password": "passwort"
}
Response:
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "user-id",
"email": "benutzer@example.com",
"name": "Max Mustermann",
"role": "mitglied"
}
}
Benutzer ausloggen
Response:
{
"success": true,
"message": "Erfolgreich ausgeloggt"
}
Aktuellen Authentifizierungsstatus abrufen
Response:
{
"isLoggedIn": true,
"user": {
"id": "user-id",
"email": "benutzer@example.com",
"name": "Max Mustermann",
"role": "mitglied"
},
"role": "mitglied"
}
Alle Mitglieder abrufen (mit Merge aus registrierten Benutzern)
Response:
{
"success": true,
"members": [
{
"id": "member-id",
"firstName": "Max",
"lastName": "Mustermann",
"geburtsdatum": "1990-01-15",
"email": "max@example.com",
"phone": "0123456789",
"address": "Musterstraße 1",
"source": "manual",
"editable": true,
"hasLogin": false
}
]
}
Neues Mitglied hinzufügen oder bestehendes bearbeiten
Request Body:
{
"id": "optional-für-update",
"firstName": "Max",
"lastName": "Mustermann",
"geburtsdatum": "1990-01-15",
"email": "max@example.com",
"phone": "0123456789",
"address": "Musterstraße 1, 12345 Musterstadt",
"notes": "Optional"
}
Response:
{
"success": true,
"message": "Mitglied erfolgreich gespeichert."
}
Hinweis: Ohne id wird ein neues Mitglied erstellt. Mit id wird ein bestehendes Mitglied aktualisiert. geburtsdatum ist Pflichtfeld zur Duplikatsprüfung (Format: YYYY-MM-DD).
Mehrere Mitglieder auf einmal importieren (Bulk-Import)
Request Body:
{
"members": [
{
"firstName": "Max",
"lastName": "Mustermann",
"geburtsdatum": "1990-01-15",
"email": "max@example.com",
"phone": "0123456789",
"address": "Musterstraße 1",
"notes": "Optional"
},
{
"firstName": "Anna",
"lastName": "Schmidt",
"geburtsdatum": "1985-03-20",
"email": "anna@example.com"
}
]
}
Response:
{
"success": true,
"summary": {
"total": 2,
"imported": 2,
"duplicates": 0,
"errors": 0
},
"results": {
"success": [
{
"index": 1,
"member": { ... }
}
],
"duplicates": [],
"errors": []
}
}
Features:
Mitglied löschen
Request Body:
{
"id": "member-id"
}
Response:
{
"success": true,
"message": "Mitglied erfolgreich gelöscht."
}
Alle News abrufen (inkl. interner News)
Neue News erstellen oder bestehende bearbeiten
Request Body:
{
"id": "optional-für-update",
"title": "Titel der News",
"content": "Inhalt der News",
"isPublic": true,
"expiresAt": "2025-12-31T23:59:59.000Z",
"isHidden": false
}
News löschen
Request Body:
{
"id": "news-id"
}
Alle Termine abrufen (für Verwaltung)
Neuen Termin erstellen
Request Body:
{
"datum": "2025-12-25",
"uhrzeit": "19:00",
"titel": "Weihnachtsfeier",
"beschreibung": "Gemeinsame Feier",
"kategorie": "Veranstaltung"
}
Termin löschen
Query Parameters:
?datum=2025-12-25&uhrzeit=19:00&titel=Weihnachtsfeier&beschreibung=...&kategorie=...
Vereinskonfiguration abrufen
Vereinskonfiguration aktualisieren
Request Body:
Komplettes Config-Objekt mit allen Einstellungen
# Login und Token erhalten
curl -X POST http://localhost:3100/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "admin@example.com", "password": "passwort"}'
# Mitglied hinzufügen mit Token
curl -X POST http://localhost:3100/api/members \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{
"firstName": "Max",
"lastName": "Mustermann",
"geburtsdatum": "1990-01-15",
"email": "max@example.com",
"phone": "0123456789"
}'
# Bulk-Import von Mitgliedern
curl -X POST http://localhost:3100/api/members/bulk \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{
"members": [
{
"firstName": "Max",
"lastName": "Mustermann",
"geburtsdatum": "1990-01-15",
"email": "max@example.com"
},
{
"firstName": "Anna",
"lastName": "Schmidt",
"geburtsdatum": "1985-03-20",
"email": "anna@example.com"
}
]
}'
// Login
const loginResponse = await fetch('/api/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'admin@example.com',
password: 'passwort'
})
})
const { token } = await loginResponse.json()
// Mitglied hinzufügen
const memberResponse = await fetch('/api/members', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
firstName: 'Max',
lastName: 'Mustermann',
geburtsdatum: '1990-01-15',
email: 'max@example.com'
})
})
// Bulk-Import
const bulkResponse = await fetch('/api/members/bulk', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
members: [
{
firstName: 'Max',
lastName: 'Mustermann',
geburtsdatum: '1990-01-15',
email: 'max@example.com'
},
{
firstName: 'Anna',
lastName: 'Schmidt',
geburtsdatum: '1985-03-20',
email: 'anna@example.com'
}
]
})
})
const result = await bulkResponse.json()
// Ergebnis: Importiert: ${result.summary.imported}, Duplikate: ${result.summary.duplicates}