Shift Pool Modul
Zweck
Das Shift Pool Modul bietet eine umfassende Schichtplanungslösung für Unternehmen. Es ermöglicht die Erstellung von Schichten, Veröffentlichung im Pool, Bewerbungssystem für Freelancer, Annahme/Ablehnung von Bewerbungen, Schicht-Verwaltung, Standort-Integration und einen Freelancer-Pool für Sicherheitsfirmen.
Verantwortlichkeiten
Was gehört zum Modul
- Schicht-Erstellung: Erstellen, Bearbeiten und Löschen von Schichten
- Schicht-Veröffentlichung: Schichten im Pool veröffentlichen oder zurückziehen
- Bewerbungssystem: Freelancer können sich auf Schichten bewerben
- Annahme/Ablehnung: Admins können Bewerbungen annehmen oder ablehnen
- Schicht-Zuweisung: Direkte Zuweisung von Mitarbeitern zu Schichten
- Schicht-Verwaltung: Status-Verwaltung (Draft, Published, Closed, Cancelled, Completed)
- Standort-Integration: Schichten mit Standorten/Objekten verknüpfen
- Öffentlicher Pool: Öffentliche Schichten für alle Freelancer sichtbar
- Schicht-Dokumente: Upload und Verwaltung von Schicht-Dokumenten
- Zeiterfassung für Schichten: Zeiteinträge für Schichten erstellen
Was gehört nicht zum Modul
- Zeiterfassung: Siehe time-tracking Modul
- Projekt-Verwaltung: Siehe projects Modul
- Compliance-Prüfungen: Siehe work-time-compliance Modul
- Kalender-Anzeige: Siehe calendar-core Modul
Implementierung
Backend- und Frontend-API sind modular aufgebaut; Details siehe interne Entwickler-Dokumentation.
Konfiguration
Entitlement
Das Modul erfordert das Entitlement module.shift_pool. Dieses wird pro Tenant aktiviert/deaktiviert.
Entitlement-Key: module.shift_pool
Environment Variables
Keine modulspezifischen ENV-Variablen erforderlich.
Defaults
- Schicht-Status:
DRAFT(beim Erstellen) - Maximale Dateigröße für Dokumente: 10MB
- Öffentlicher Pool: Standardmäßig deaktiviert (
isPublicPool: false)
Abhängigkeiten
Optionale Abhängigkeiten
- projects: Für Standort-Integration (Schichten mit Objekten verknüpfen)
- time-tracking: Für Zeiterfassung in Schichten
Core-Abhängigkeiten
- calendar-core: Schichten werden als Events im Kalender angezeigt
- members: Für Rollenprüfung (Admin/Manager für Schicht-Verwaltung)
- notifications: Für Benachrichtigungen bei Bewerbungen
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>
Admin-Endpoints
Schicht erstellen
POST /api/shift-pool/shifts
Erstellt eine neue Schicht (Draft).
Request Body:
{
"title": "Schicht-Titel",
"description": "Beschreibung",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z",
"locationId": "Optional: Standort-ID",
"requiredSkills": ["skill1", "skill2"],
"maxApplications": 5,
"isPublicPool": false
}
Response:
{
"shift": {
"id": "shift123",
"title": "Schicht-Titel",
"status": "DRAFT",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
},
"message": "Shift created successfully"
}
Schichten auflisten (Admin)
GET /api/shift-pool/admin/shifts
Listet alle Schichten für Admin.
Response:
Schicht aktualisieren
PUT /api/shift-pool/shifts/:shiftId
Aktualisiert eine Schicht. Nur DRAFT-Schichten können vollständig bearbeitet werden.
Request Body:
{
"title": "Aktualisierter Titel",
"description": "Aktualisierte Beschreibung",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z",
"locationId": "location123",
"requiredSkills": ["skill1"],
"maxApplications": 10
}
Response:
{
"shift": {
"id": "shift123",
"title": "Aktualisierter Titel",
"status": "DRAFT",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
},
"message": "Shift updated successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 409 INVALID_STATUS: Schicht kann nicht bearbeitet werden (z.B. bereits veröffentlicht)
- 422 VALIDATION_ERROR: Ungültige Eingabedaten
Schicht löschen
DELETE /api/shift-pool/shifts/:shiftId
Löscht eine Schicht. Nur DRAFT-Schichten können gelöscht werden.
Response:
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 409 INVALID_STATUS: Nur Draft-Schichten können gelöscht werden
Schicht veröffentlichen
POST /api/shift-pool/shifts/:shiftId/publish
Veröffentlicht eine Schicht im Pool. Die Schicht wird für Bewerbungen verfügbar.
Response:
{
"shift": {
"id": "shift123",
"status": "PUBLISHED",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
},
"message": "Shift published successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 409 INVALID_STATUS: Schicht kann nicht veröffentlicht werden (z.B. bereits veröffentlicht oder abgesagt)
Schicht zurückziehen
POST /api/shift-pool/shifts/:shiftId/unpublish
Zieht eine veröffentlichte Schicht zurück und setzt sie auf DRAFT-Status.
Response:
{
"shift": {
"id": "shift123",
"status": "DRAFT",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
},
"message": "Shift unpublished successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 409 INVALID_STATUS: Schicht kann nicht zurückgezogen werden (z.B. bereits geschlossen)
Schicht schließen
POST /api/shift-pool/shifts/:shiftId/close
Schließt eine veröffentlichte Schicht für weitere Bewerbungen.
Response:
{
"shift": {
"id": "shift123",
"status": "CLOSED",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
},
"message": "Shift closed successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 409 INVALID_STATUS: Nur veröffentlichte Schichten können geschlossen werden
Schicht abbrechen
POST /api/shift-pool/shifts/:shiftId/cancel
Sagt eine Schicht ab.
Response:
{
"shift": {
"id": "shift123",
"status": "CANCELLED",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
},
"message": "Shift cancelled successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 409 INVALID_STATUS: Schicht ist bereits abgesagt
Pool-Endpoints
Pool-Liste abrufen
GET /api/shift-pool/pool?from=2024-01-01&to=2024-01-31
Listet verfügbare Schichten (nur PUBLISHED).
Query-Parameter:
- from (optional): Start-Datum (ISO 8601)
- to (optional): End-Datum (ISO 8601)
- location (optional): Standort-Filter
- q (optional): Suchbegriff
Bewerbungs-Endpoints
Auf Schicht bewerben
POST /api/shift-pool/shifts/:shiftId/apply
Bewirbt sich auf eine Schicht.
Request Body:
Bewerbungen abrufen
GET /api/shift-pool/shifts/:shiftId/applications
Lädt alle Bewerbungen für eine Schicht (nur Admin).
Bewerbung annehmen
POST /api/shift-pool/applications/:applicationId/accept
Nimmt eine Bewerbung an (nur Admin).
Bewerbung ablehnen
POST /api/shift-pool/applications/:applicationId/reject
Lehnt eine Bewerbung ab (nur Admin).
Response:
{
"application": {
"id": "app123",
"status": "REJECTED",
"reviewedAt": "2024-01-15T10:00:00Z",
"reviewedBy": "admin123"
},
"message": "Application rejected"
}
Fehler:
- 404 NOT_FOUND: Bewerbung nicht gefunden
- 409 INVALID_STATUS: Bewerbung kann nicht abgelehnt werden (z.B. bereits angenommen)
Bewerbung ablehnung zurückziehen
POST /api/shift-pool/applications/:applicationId/unreject
Zieht eine Ablehnung zurück und setzt den Status auf PENDING.
Response:
{
"application": {
"id": "app123",
"status": "PENDING"
},
"message": "Rejection undone - application is pending again"
}
Fehler:
- 404 NOT_FOUND: Bewerbung nicht gefunden
- 409 INVALID_STATUS: Bewerbung kann nicht zurückgesetzt werden
Bewerbung widerrufen
POST /api/shift-pool/applications/:applicationId/revoke
Macht eine akzeptierte Bewerbung rückgängig und storniert die Zuweisung.
Response:
{
"application": {
"id": "app123",
"status": "WITHDRAWN"
},
"message": "Application revoked - assignment cancelled"
}
Fehler:
- 404 NOT_FOUND: Bewerbung oder Schicht nicht gefunden
- 409 INVALID_STATUS: Bewerbung kann nicht widerrufen werden
Öffentliche Endpoints
Öffentliche Pool-Liste
GET /api/shift-pool/public/pool
Öffentliche Pool-Liste (alle Schichten mit isPublicPool: true). Kein Auth erforderlich.
Query-Parameter:
- from (optional): Start-Datum
- to (optional): End-Datum
- location (optional): Standort-Filter
- q (optional): Suchbegriff
User-Endpoints
Meine Schichten
GET /api/shift-pool/my-shifts?includeCompleted=false
Lädt zugewiesene Schichten des aktuellen Users.
Query-Parameter:
- includeCompleted (optional): Auch abgeschlossene Schichten einbeziehen (Standard: false)
Response:
{
"shifts": [
{
"id": "shift123",
"title": "Schicht-Titel",
"status": "PUBLISHED",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
}
],
"count": 1
}
Schicht-Details
GET /api/shift-pool/shifts/:shiftId
Lädt Details einer Schicht.
Response:
{
"shift": {
"id": "shift123",
"title": "Schicht-Titel",
"description": "Beschreibung",
"status": "PUBLISHED",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z",
"locationId": "location123",
"requiredSkills": ["skill1"],
"maxApplications": 5,
"isPublicPool": false
}
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
Firestore Collections
Shifts
Pfad: /tenants/{tenantId}/shifts/{shiftId}
{
title: string;
description?: string;
startsAt: Timestamp;
endsAt: Timestamp;
status: 'DRAFT' | 'PUBLISHED' | 'CLOSED' | 'CANCELLED' | 'COMPLETED';
locationId?: string;
requiredSkills?: string[];
maxApplications?: number;
isPublicPool: boolean;
createdAt: Timestamp;
updatedAt: Timestamp;
createdBy: string; // UID
}
Applications
Pfad: /tenants/{tenantId}/applications/{applicationId}
{
shiftId: string;
uid: string;
email: string;
status: 'PENDING' | 'ACCEPTED' | 'REJECTED' | 'WITHDRAWN';
message?: string;
appliedAt: Timestamp;
reviewedAt?: Timestamp;
reviewedBy?: string; // UID
}
Wird dokumentiert: Detaillierte Datenbank-Struktur folgt.
Fehlerfälle
HTTP-Status-Codes
- 200 OK: Erfolgreich
- 201 Created: Ressource erstellt
- 400 Bad Request: Validierungsfehler
- 401 Unauthorized: Nicht authentifiziert
- 403 Forbidden: Keine Berechtigung
- 404 Not Found: Ressource nicht gefunden
- 409 Conflict: Konflikt (z.B. bereits beworben)
- 500 Internal Server Error: Server-Fehler
Fehlercodes
Assignment-Endpoints
Zuweisungen abrufen
GET /api/shift-pool/shifts/:shiftId/assignments
Lädt alle Zuweisungen für eine Schicht (Admin).
Response:
{
"assignments": [
{
"id": "assign123",
"shiftId": "shift123",
"memberUid": "user123",
"status": "CONFIRMED",
"assignedAt": "2024-01-15T10:00:00Z"
}
],
"count": 1
}
Mitarbeiter zuweisen
POST /api/shift-pool/shifts/:shiftId/assign
Weist einen Mitarbeiter direkt einer Schicht zu (Admin).
Request Body:
Response:
{
"assignment": {
"id": "assign123",
"shiftId": "shift123",
"memberUid": "user123",
"status": "CONFIRMED",
"assignedAt": "2024-01-15T10:00:00Z"
},
"message": "Member assigned to shift"
}
Fehler:
- 400 Bad Request: memberUid fehlt
- 404 NOT_FOUND: Schicht oder Mitglied nicht gefunden
- 409 ALREADY_ASSIGNED: Mitglied ist bereits zugewiesen
- 409 NO_SLOTS: Keine freien Plätze verfügbar
Zuweisung entfernen
DELETE /api/shift-pool/assignments/:assignmentId
Entfernt eine Zuweisung (Admin).
Response:
Fehler:
- 404 NOT_FOUND: Zuweisung oder Schicht nicht gefunden
Absageanfrage stellen
POST /api/shift-pool/assignments/:assignmentId/request-cancellation
Mitarbeiter stellt eine Absageanfrage für eine Zuweisung.
Request Body:
Response:
{
"assignment": {
"id": "assign123",
"status": "PENDING_CANCELLATION",
"requestReason": "Grund für Absage"
},
"message": "Cancellation request submitted successfully"
}
Fehler:
- 404 NOT_FOUND: Zuweisung nicht gefunden
- 403 FORBIDDEN: Zuweisung gehört nicht zum User
- 409 NOT_ACTIVE: Zuweisung ist nicht aktiv
Verschiebungsanfrage stellen
POST /api/shift-pool/assignments/:assignmentId/request-transfer
Mitarbeiter stellt eine Verschiebungsanfrage für eine Zuweisung.
Request Body:
Response:
{
"assignment": {
"id": "assign123",
"status": "PENDING_TRANSFER",
"suggestedUid": "user456",
"requestReason": "Grund für Verschiebung"
},
"message": "Transfer request submitted successfully"
}
Fehler:
- 400 Bad Request: suggestedUid fehlt
- 404 NOT_FOUND: Zuweisung oder vorgeschlagenes Mitglied nicht gefunden
- 403 FORBIDDEN: Zuweisung gehört nicht zum User
- 409 CONFLICT: Zuweisung ist nicht aktiv oder vorgeschlagenes Mitglied ist bereits zugewiesen
Ablehnungsanfrage stellen
POST /api/shift-pool/assignments/:assignmentId/request-decline
Mitarbeiter stellt eine Ablehnungsanfrage für eine Zuweisung.
Request Body:
Response:
{
"assignment": {
"id": "assign123",
"status": "PENDING_DECLINE",
"requestReason": "Grund für Ablehnung"
},
"message": "Decline request submitted successfully"
}
Fehler:
- 404 NOT_FOUND: Zuweisung nicht gefunden
- 403 FORBIDDEN: Zuweisung gehört nicht zum User
- 409 NOT_ACTIVE: Zuweisung ist nicht aktiv
Anfrage genehmigen/ablehnen
POST /api/shift-pool/assignments/:assignmentId/approve-request
Admin/Manager genehmigt oder lehnt eine Anfrage ab.
Request Body:
Response:
{
"assignment": {
"id": "assign123",
"status": "CANCELLED"
},
"newAssignment": {
"id": "assign456",
"status": "CONFIRMED"
},
"message": "Request approved successfully"
}
Fehler:
- 400 Bad Request: approved muss ein Boolean sein
- 404 NOT_FOUND: Zuweisung oder Schicht nicht gefunden
- 403 FORBIDDEN: Admin- oder Manager-Rolle erforderlich
- 409 CONFLICT: Keine ausstehende Anfrage oder keine freien Plätze
Vorschlag annehmen
POST /api/shift-pool/assignments/:assignmentId/accept-suggestion
Vorgeschlagener Kollege nimmt die Zuweisung an.
Response:
{
"assignment": {
"id": "assign123",
"status": "CONFIRMED"
},
"message": "Suggestion accepted successfully"
}
Fehler:
- 404 NOT_FOUND: Zuweisung nicht gefunden
- 403 FORBIDDEN: Zuweisung gehört nicht zum User
- 409 NOT_PENDING_SUGGESTION: Zuweisung ist keine ausstehende Vorschlag
Vorschlag ablehnen
POST /api/shift-pool/assignments/:assignmentId/reject-suggestion
Vorgeschlagener Kollege lehnt die Zuweisung ab.
Response:
{
"assignment": {
"id": "assign123",
"status": "REJECTED"
},
"message": "Suggestion rejected successfully"
}
Fehler:
- 404 NOT_FOUND: Zuweisung nicht gefunden
- 403 FORBIDDEN: Zuweisung gehört nicht zum User
- 409 NOT_PENDING_SUGGESTION: Zuweisung ist keine ausstehende Vorschlag
Shift Completion-Endpoints
Schicht abschließen
POST /api/shift-pool/shifts/:shiftId/complete
Beendet eine Schicht (nur Crew-Leiter).
Response:
{
"shift": {
"id": "shift123",
"status": "COMPLETED",
"completedAt": "2024-01-15T17:00:00Z"
},
"message": "Shift completed successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 403 FORBIDDEN: Nur Crew-Leiter, Manager oder Admin können Schichten abschließen
- 409 INVALID_STATUS: Schicht ist bereits abgeschlossen oder kann nicht abgeschlossen werden
Schicht wieder öffnen
POST /api/shift-pool/shifts/:shiftId/reopen
Öffnet eine beendete Schicht wieder (nur Crew-Leiter, nur innerhalb von 24 Stunden).
Response:
{
"shift": {
"id": "shift123",
"status": "CLOSED",
"reopenedAt": "2024-01-15T18:00:00Z"
},
"message": "Shift reopened successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 403 FORBIDDEN: Nur Crew-Leiter, Manager oder Admin können Schichten wieder öffnen
- 409 INVALID_STATUS: Nur abgeschlossene Schichten können wieder geöffnet werden (innerhalb von 24 Stunden)
Pausen-Vorschau
GET /api/shift-pool/shifts/:shiftId/preview-breaks?date=2024-01-15
Zeigt eine Vorschau der automatischen Pausen, die für alle Mitarbeiter erstellt werden würden.
Query-Parameter:
- date (optional): Datum für die Vorschau (ISO 8601, Standard: heute)
Response:
{
"preview": [
{
"memberUid": "user123",
"breaks": [
{
"start": "2024-01-15T12:00:00Z",
"end": "2024-01-15T12:30:00Z",
"durationMinutes": 30
}
]
}
],
"count": 1
}
Shift Time Entries-Endpoints
Zeiteinträge abrufen
GET /api/shift-pool/shifts/:shiftId/time-entries
Lädt alle Zeiteinträge einer Schicht.
Response:
{
"entries": [
{
"id": "entry123",
"shiftId": "shift123",
"memberUid": "user123",
"clockIn": "2024-01-15T08:00:00Z",
"clockOut": "2024-01-15T17:00:00Z",
"durationMinutes": 540
}
],
"count": 1
}
Zeiteintrag erstellen
POST /api/shift-pool/shifts/:shiftId/time-entries
Erstellt einen Zeiteintrag für eine Schicht. Nur zugewiesene Mitglieder oder Crew-Leiter können Zeiteinträge erstellen.
Request Body:
{
"memberUid": "user123",
"clockIn": "2024-01-15T08:00:00Z",
"clockOut": "2024-01-15T17:00:00Z",
"note": "Optional: Notiz"
}
Response:
{
"entry": {
"id": "entry123",
"shiftId": "shift123",
"memberUid": "user123",
"clockIn": "2024-01-15T08:00:00Z",
"clockOut": "2024-01-15T17:00:00Z",
"durationMinutes": 540
},
"message": "Time entry created successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden
- 403 FORBIDDEN: User ist nicht der Schicht zugewiesen oder kein Crew-Leiter
- 422 VALIDATION_ERROR: Ungültige Zeiten oder Dauer
Zeiteintrag aktualisieren
PUT /api/shift-pool/shifts/:shiftId/time-entries/:entryId
Aktualisiert einen Zeiteintrag. Nur Crew-Leiter, Manager oder Admin können Zeiteinträge aktualisieren.
Request Body:
{
"clockIn": "2024-01-15T08:00:00Z",
"clockOut": "2024-01-15T17:00:00Z",
"note": "Aktualisierte Notiz"
}
Response:
{
"entry": {
"id": "entry123",
"clockIn": "2024-01-15T08:00:00Z",
"clockOut": "2024-01-15T17:00:00Z",
"durationMinutes": 540
},
"message": "Time entry updated successfully"
}
Fehler:
- 404 NOT_FOUND: Zeiteintrag oder Schicht nicht gefunden
- 409 INVALID_SHIFT: Zeiteintrag gehört nicht zu dieser Schicht
- 403 FORBIDDEN: Nur Crew-Leiter, Manager oder Admin können Zeiteinträge aktualisieren
- 422 SHIFT_COMPLETED: Schicht ist bereits abgeschlossen (mehr als 24 Stunden)
- 422 VALIDATION_ERROR: Ungültige Zeiten oder Dauer
Shift Documents-Endpoints
Dokument hochladen
POST /api/shift-pool/shifts/:shiftId/documents
Lädt ein Dokument für eine Schicht hoch. Nur zugewiesene Mitglieder können Dokumente hochladen.
Request: Multipart Form-Data
- file (required): Die Datei (max. 10MB)
Response:
{
"document": {
"id": "doc123",
"shiftId": "shift123",
"fileName": "dokument.pdf",
"fileSize": 1024000,
"uploadedBy": "user123",
"uploadedAt": "2024-01-15T10:00:00Z"
},
"message": "Document uploaded successfully"
}
Fehler:
- 400 MISSING_FILE: Keine Datei hochgeladen
- 404 NOT_FOUND: Schicht nicht gefunden
- 403 FORBIDDEN: Nur zugewiesene Mitglieder können Dokumente hochladen
- 422 VALIDATION_ERROR: Ungültiger Dateityp oder Dateigröße überschreitet 10MB
Dokumente abrufen
GET /api/shift-pool/shifts/:shiftId/documents
Lädt alle Dokumente einer Schicht (nur Admin, Manager oder Crew-Leiter).
Response:
{
"documents": [
{
"id": "doc123",
"shiftId": "shift123",
"fileName": "dokument.pdf",
"fileSize": 1024000,
"uploadedBy": "user123",
"uploadedAt": "2024-01-15T10:00:00Z"
}
],
"count": 1
}
Fehler:
- 403 FORBIDDEN: Nur Crew-Leiter, Manager oder Admin können Dokumente abrufen
Dokument herunterladen
GET /api/shift-pool/shifts/:shiftId/documents/:documentId/download
Generiert eine Download-URL für ein Dokument.
Response:
Fehler:
- 404 NOT_FOUND: Dokument nicht gefunden
- 409 INVALID_SHIFT: Dokument gehört nicht zu dieser Schicht
- 403 FORBIDDEN: Nur Crew-Leiter, Manager oder Admin können Dokumente herunterladen
Dokument löschen
DELETE /api/shift-pool/shifts/:shiftId/documents/:documentId
Löscht ein Dokument. Nur Crew-Leiter, Manager oder Admin können Dokumente löschen.
Response:
Fehler:
- 404 NOT_FOUND: Dokument nicht gefunden
- 409 INVALID_SHIFT: Dokument gehört nicht zu dieser Schicht
- 403 FORBIDDEN: Nur Crew-Leiter, Manager oder Admin können Dokumente löschen
Freelancer-Endpoints
Freelancer-Bewerbungen abrufen
GET /api/shift-pool/freelancer/applications
Lädt alle Bewerbungen des eingeloggten Freelancers.
Response:
{
"applications": [
{
"id": "app123",
"shiftId": "shift456",
"status": "PENDING",
"appliedAt": "2024-01-15T10:00:00Z"
}
],
"count": 1
}
Fehler:
- 403 FORBIDDEN: Nur Freelancer können auf diesen Endpunkt zugreifen
Freelancer-Schichten abrufen
GET /api/shift-pool/freelancer/shifts?includeCompleted=false
Lädt alle Schichten des eingeloggten Freelancers (angenommene Bewerbungen).
Query-Parameter:
- includeCompleted (optional): Auch abgeschlossene Schichten einbeziehen (Standard: false)
Response:
{
"shifts": [
{
"id": "shift456",
"title": "Schicht-Titel",
"status": "PUBLISHED",
"startsAt": "2024-01-15T08:00:00Z",
"endsAt": "2024-01-15T17:00:00Z"
}
],
"count": 1
}
Fehler:
- 403 FORBIDDEN: Nur Freelancer können auf diesen Endpunkt zugreifen
Auf öffentliche Schicht bewerben
POST /api/shift-pool/public/shifts/:shiftId/apply
Bewerbung auf öffentliche Schicht als Freelancer.
Request Body:
Response:
{
"application": {
"id": "app123",
"shiftId": "shift456",
"status": "PENDING",
"appliedAt": "2024-01-15T10:00:00Z"
},
"message": "Application submitted successfully"
}
Fehler:
- 404 NOT_FOUND: Schicht nicht gefunden oder nicht verfügbar
- 422 VALIDATION_ERROR: Bewerbungsfrist abgelaufen oder bereits beworben
- 403 FORBIDDEN: Nur Freelancer können sich auf öffentliche Schichten bewerben
Fehlercodes
Die folgenden Fehlercodes werden von den API-Endpunkten zurückgegeben:
NOT_FOUND: Ressource nicht gefundenINVALID_STATUS: Ungültiger Status für die OperationVALIDATION_ERROR: Validierungsfehler bei EingabedatenALREADY_APPLIED: Bereits auf diese Schicht beworbenNOT_AVAILABLE: Schicht ist nicht für Bewerbungen verfügbarDEADLINE_PASSED: Bewerbungsfrist abgelaufenNO_SLOTS: Keine freien Plätze verfügbarALREADY_ASSIGNED: Mitglied ist bereits zugewiesenFORBIDDEN: Keine Berechtigung für die OperationNOT_ACTIVE: Zuweisung ist nicht aktivNOT_PENDING_SUGGESTION: Zuweisung ist keine ausstehende VorschlagINVALID_SHIFT: Ressource gehört nicht zu dieser SchichtSHIFT_COMPLETED: Schicht ist bereits abgeschlossen (mehr als 24 Stunden)MISSING_FILE: Keine Datei hochgeladenCONFLICT: Konflikt bei der Operation
FAQ / Troubleshooting
Wird dokumentiert: Häufige Fragen und Lösungen folgen.