Calendar Core Modul
Zweck
Das Calendar Core Modul ist das zentrale Kalendermodul von TimeAM. Es aggregiert Events aus verschiedenen Feature-Modulen (Zeiterfassung, Schichtplanung, Projekte) und stellt sie in einer einheitlichen Kalenderansicht dar. Das Modul nutzt FullCalendar (React) als Basis-Library.
Verantwortlichkeiten
Was gehört zum Modul
- Event-Aggregation: Events aus verschiedenen Modulen sammeln und zusammenführen
- Kalender-Ansichten: Monat, Woche, Tag, Liste
- Event-Filterung: Nach Modulen, Datum, Status filtern
- Event-Darstellung: Einheitliche Darstellung aller Events
- Kalender-Integration: Integration mit FullCalendar (React)
Was gehört nicht zum Modul
- Event-Erstellung: Events werden von anderen Modulen erstellt (time-tracking, shift-pool, etc.)
- Event-Verwaltung: Bearbeitung von Events erfolgt in den jeweiligen Modulen
- Benachrichtigungen: Siehe notifications Modul
Implementierung
Backend- und Frontend-API sind modular aufgebaut; Details siehe interne Entwickler-Dokumentation.
Konfiguration
Entitlement
Das Modul ist ein Core-Modul und erfordert kein spezielles Entitlement. Es ist immer aktiv.
Entitlement-Key: Keiner (Core-Modul)
Environment Variables
Keine modulspezifischen ENV-Variablen erforderlich.
Defaults
- Standard-Ansicht: Monat
- Zeitzone: Lokale Zeitzone des Browsers
- Sprache: Deutsch (de-DE)
Abhängigkeiten
Optionale Abhängigkeiten
- time-tracking: Für Zeiterfassungs-Events im Kalender
- shift-pool: Für Schicht-Events im Kalender
- projects: Für Projekt-Events im Kalender
Core-Abhängigkeiten
Keine.
API-Endpoints
Authentifizierung
Alle Endpoints erfordern Authentifizierung. Zwei Methoden werden unterstützt:
- Firebase ID Token (Standard für Web-App)
- API-Token (für externe Nutzung)
Header: Authorization: Bearer <token>
Events abrufen
GET /api/calendar/events?from=2024-01-01&to=2024-01-31&includeModules=time-tracking,shift-pool
Lädt Kalender-Events aus allen aktivierten Modulen.
Query-Parameter:
- from (required): Start-Datum (ISO 8601)
- to (required): End-Datum (ISO 8601)
- includeModules (optional): Komma-getrennte Liste von Modulen (z.B. time-tracking,shift-pool)
Response:
{
"events": [
{
"id": "time-tracking:entry123",
"title": "Arbeitszeit",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z",
"sourceModule": "time-tracking",
"ref": {
"type": "timeEntry",
"id": "entry123"
},
"status": "completed",
"meta": {
"durationMinutes": 540
}
},
{
"id": "shift-pool:shift456",
"title": "Schicht: Sicherheitsdienst",
"startsAt": "2024-01-16T20:00:00Z",
"endsAt": "2024-01-17T06:00:00Z",
"sourceModule": "shift-pool",
"ref": {
"type": "shift",
"id": "shift456"
},
"status": "published",
"meta": {
"location": "Standort A"
}
}
],
"count": 2,
"range": {
"from": "2024-01-01T00:00:00Z",
"to": "2024-01-31T23:59:59Z"
},
"loadedModules": ["time-tracking", "shift-pool"]
}
Fehler:
- 400 INVALID_FROM: Fehlender oder ungültiger "from" Parameter
- 400 INVALID_TO: Fehlender oder ungültiger "to" Parameter
- 400 INVALID_FROM_FORMAT: Ungültiges "from" Datumsformat
- 400 INVALID_TO_FORMAT: Ungültiges "to" Datumsformat
- 400 INVALID_RANGE: "from" muss vor "to" liegen
- 400 RANGE_TOO_LARGE: Zeitraum zu groß (max. 93 Tage)
Beispiele:
Beispiel 1: Alle Events für einen Monat
curl -X GET "https://api.example.com/api/calendar/events?from=2024-01-01&to=2024-01-31" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Beispiel 2: Nur Zeiterfassungs-Events
curl -X GET "https://api.example.com/api/calendar/events?from=2024-01-01&to=2024-01-31&includeModules=time-tracking" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Beispiel 3: Zeiterfassung und Schichten
curl -X GET "https://api.example.com/api/calendar/events?from=2024-01-01&to=2024-01-31&includeModules=time-tracking,shift-pool" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Firestore Collections
Das Calendar Core Modul verwendet keine eigenen Collections. Es aggregiert Daten aus anderen Modulen:
- Time Entries:
/tenants/{tenantId}/timeEntries/{entryId}(aus time-tracking) - Shifts:
/tenants/{tenantId}/shifts/{shiftId}(aus shift-pool)
Wird dokumentiert: Detaillierte Datenbank-Struktur folgt.
Fehlerfälle
HTTP-Status-Codes
- 200 OK: Erfolgreich
- 400 Bad Request: Validierungsfehler (z.B. fehlende Datum-Parameter)
- 401 Unauthorized: Nicht authentifiziert
- 403 Forbidden: Keine Berechtigung
- 500 Internal Server Error: Server-Fehler
Fehlercodes
Die folgenden Fehlercodes werden von den API-Endpunkten zurückgegeben:
INVALID_FROM: Fehlender oder ungültiger "from" Parameter (ISO 8601 Datum erforderlich)INVALID_TO: Fehlender oder ungültiger "to" Parameter (ISO 8601 Datum erforderlich)INVALID_FROM_FORMAT: Ungültiges "from" DatumsformatINVALID_TO_FORMAT: Ungültiges "to" DatumsformatINVALID_RANGE: "from" muss vor "to" liegenRANGE_TOO_LARGE: Zeitraum zu groß (maximal 93 Tage erlaubt)
FAQ / Troubleshooting
Warum werden keine Events angezeigt?
- Prüfen Sie, ob die entsprechenden Module aktiviert sind (time-tracking, shift-pool)
- Prüfen Sie, ob im angegebenen Zeitraum Events existieren
- Prüfen Sie die
includeModulesParameter
Wie werden Events aus verschiedenen Modulen zusammengeführt?
Das Calendar Core Modul lädt Events parallel aus allen aktivierten Modulen und fügt sie zu einer Liste zusammen. Die Events werden nach Startzeit sortiert.
Wird dokumentiert: Weitere häufige Fragen und Lösungen folgen.