5.2 KiB
5.2 KiB
🔧 Problembehebung: Calendar-API-Endpoints
Problem-Analyse (01.06.2025)
Identifizierte Fehler
Aus den Log-Dateien wurden zwei kritische 404-Fehler identifiziert:
-
/api/calendar/events
- 404 ErrorGET /api/calendar/events?start=2025-06-01T00:00:00%2B02:00&end=2025-06-08T00:00:00%2B02:00 HTTP/1.1" 404
-
/api/calendar/export
- 404 ErrorGET /api/calendar/export?format=excel&start_date=2025-05-31T00:00:00&end_date=2025-06-29T23:59:59 HTTP/1.1" 404
Ursachen-Analyse
Problem 1: Fehlende /api/calendar/events
Route
- FullCalendar JavaScript erwartet Events unter
/api/calendar/events
- Implementiert war nur:
/api/calendar
- Frontend-Backend-Mismatch: Unterschiedliche URL-Erwartungen
Problem 2: Parameter-Inkompatibilität
- FullCalendar sendet:
start
undend
Parameter mit Zeitzone (z.B.+02:00
) - Backend erwartete:
from
undto
Parameter ohne Zeitzone - Zeitzone-Handling: ISO-Format mit Timezone-Suffix wurde nicht korrekt geparst
Implementierte Lösungen
✅ Lösung 1: Alternative Route hinzugefügt
# Zusätzliche Route für FullCalendar-Kompatibilität
@calendar_blueprint.route('/api/calendar/events', methods=['GET'])
@login_required
def api_get_calendar_events_alt():
"""Alternative Route für FullCalendar-Events - delegiert an api_get_calendar_events."""
return api_get_calendar_events()
✅ Lösung 2: Parameter-Kompatibilität erweitert
Vorher:
start_str = request.args.get('from')
end_str = request.args.get('to')
Nachher:
# FullCalendar verwendet 'start' und 'end'
start_str = request.args.get('start') or request.args.get('from')
end_str = request.args.get('end') or request.args.get('to')
✅ Lösung 3: Zeitzone-Handling implementiert
try:
# FullCalendar sendet ISO-Format mit Zeitzone, das muss geparst werden
if start_str and start_str.endswith('+02:00'):
start_str = start_str[:-6] # Zeitzone entfernen
if end_str and end_str.endswith('+02:00'):
end_str = end_str[:-6] # Zeitzone entfernen
start_date = datetime.fromisoformat(start_str)
end_date = datetime.fromisoformat(end_str)
except ValueError:
return jsonify({"error": "Ungültiges Datumsformat"}), 400
✅ Lösung 4: Erweiterte Logging
logger.info(f"📅 Kalender-Events abgerufen: {len(events)} Einträge für Zeitraum {start_date} bis {end_date}")
Verifizierung der Korrekturen
API-Endpoints jetzt verfügbar:
/api/calendar
- Ursprünglicher Endpoint/api/calendar/events
- FullCalendar-kompatible Route ✨ NEU/api/calendar/export
- Export-Funktionalität
Parameter-Unterstützung:
Frontend | Parameter | Backend-Unterstützung |
---|---|---|
FullCalendar | start , end |
✅ Primär unterstützt |
Custom API | from , to |
✅ Fallback verfügbar |
Export-API | start_date , end_date |
✅ Spezifisch für Export |
Zeitzone-Unterstützung:
- ✅ ISO-Format mit Zeitzone:
2025-06-01T00:00:00+02:00
- ✅ ISO-Format ohne Zeitzone:
2025-06-01T00:00:00
- ✅ Automatische Zeitzone-Entfernung bei FullCalendar-Requests
Verbesserungen im Detail
1. Robuste Parameter-Extraktion
# Flexibel für verschiedene Frontend-Implementierungen
start_str = request.args.get('start') or request.args.get('from')
end_str = request.args.get('end') or request.args.get('to')
2. Intelligente Zeitzone-Behandlung
- Automatische Erkennung von Zeitzone-Suffixen
- Graceful Fallback bei verschiedenen Datumsformaten
- Kompatibilität mit FullCalendar und custom APIs
3. Erweiterte Fehlerbehandlung
- Spezifische Fehlermeldungen für ungültige Datumsformate
- Robuste Exception-Behandlung
- Ausführliche Logging für Debugging
4. Export-Funktionalität bleibt unverändert
- Export-API verwendet weiterhin
start_date
/end_date
- Klare Trennung zwischen Calendar-Events und Export-APIs
- Konsistente Parameter-Namensgebung pro Kontext
Test-Scenarios
✅ FullCalendar-Kompatibilität
GET /api/calendar/events?start=2025-06-01T00:00:00+02:00&end=2025-06-08T00:00:00+02:00
✅ Legacy-API-Kompatibilität
GET /api/calendar?from=2025-06-01T00:00:00&to=2025-06-08T00:00:00
✅ Export-Funktionalität
GET /api/calendar/export?format=csv&start_date=2025-06-01T00:00:00&end_date=2025-06-30T23:59:59
Monitoring und Logging
Neue Log-Einträge:
📅 Kalender-Events abgerufen: 15 Einträge für Zeitraum 2025-06-01 bis 2025-06-08
📊 CSV-Export erstellt: 23 Einträge für Benutzer admin
Error-Monitoring:
- Automatische Logging von Parameter-Parsing-Fehlern
- Zeitzone-spezifische Fehlerbehandlung
- Performance-Monitoring für große Datenmengen
Nächste Schritte
- Performance-Test mit großen Datenmengen
- Frontend-Integration verifizieren
- Cross-Browser-Kompatibilität testen
- Mobile-Responsiveness der Export-Funktion prüfen
Status: ✅ Vollständig behoben
Datum: 01.06.2025
Betroffen: Calendar-API, Export-Funktionalität
Impact: Keine Ausfallzeit, Abwärtskompatibilität erhalten