Aufgaben API
Aufgabenarbeitsbereich
Aufgaben erstellen, Arbeit filtern und wiederverwendbare Aufgabenbezeichnungen verwalten
Diese Routen bilden die Grundlage des PrimeCal-Aufgabenarbeitsbereichs. Sie beziehen sich alle auf den authentifizierten Benutzer und umfassen Aufgaben-CRUD, Etikettenverwaltung, die Focus-Ansicht, automatische Terminplanung, Delegation und Abhängigkeiten.
Quelle
- Aufgabencontroller:
backend-nestjs/src/tasks/tasks.controller.ts - Aufgabenbeschriftungscontroller:
backend-nestjs/src/tasks/task-labels.controller.ts - DTOs:
backend-nestjs/src/tasks/dto/create-task.dto.ts,backend-nestjs/src/tasks/dto/query-tasks.dto.ts,backend-nestjs/src/tasks/dto/create-task-label.dto.ts,backend-nestjs/src/tasks/dto/update-task-labels.dto.ts - Aufzählungen:
backend-nestjs/src/entities/task.entity.ts
Authentifizierung und Berechtigungen
- Alle Routen auf dieser Seite erfordern eine Authentifizierung.
- Der Aufgaben- und Labelbesitz ist auf den aktuellen Benutzer beschränkt.
- Aufgabenbezeichnungsrouten sind sowohl unter
/api/tasks/labelsals auch unter der Vorgängerversion/api/task-labelsverfügbar.
Endpunktreferenz
Aufgaben
| Methode | Pfad | Zweck | Anfrage oder Anfrage | Auth | Quelle |
|---|---|---|---|---|---|
POST | /api/tasks | Erstellen Sie eine Aufgabe. | Text: Aufgabenfelder | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
GET | /api/tasks | Listen Sie Aufgaben mit Filtern auf. | Abfrage: status,priority,search,dueFrom,dueTo,labelIds,sortBy,sortDirection,page,limit | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
GET | /api/tasks/focus | Die für heute instanziierten Routine- und fälligen Aufgaben, nach Zeitplan sortiert, ohne Aufgaben, die durch eine unerledigte Abhängigkeit blockiert sind. | Abfrage: date (optional, YYYY-MM-DD, Standard: heute UTC) | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
GET | /api/tasks/:id | Holen Sie sich eine Aufgabe. | Pfad: id | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
PATCH | /api/tasks/:id | Aktualisieren Sie eine Aufgabe. | Pfad: id, Text: Teilaufgabenfelder | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
DELETE | /api/tasks/:id | Eine Aufgabe löschen. | Pfad: id | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
POST | /api/tasks/:id/auto-schedule | Findet die nächste freie Kalenderlücke der Aufgabe (anhand von Dauer, Priorität, Kontext und bevorzugtem Zeitfenster) und setzt deren Fälligkeitsdatum/-uhrzeit auf diese Lücke. | Pfad: id | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
PATCH | /api/tasks/:id/auto-schedule/enable | Aktiviert die automatische Terminplanung für eine Aufgabe. | Pfad: id | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
PATCH | /api/tasks/:id/auto-schedule/disable | Deaktiviert die automatische Terminplanung für eine Aufgabe. | Pfad: id | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
POST | /api/tasks/:id/labels | Ersetzen oder erweitern Sie Aufgabenbezeichnungen. | Pfad: id, Text: labelIds,inlineLabels | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
DELETE | /api/tasks/:id/labels/:labelId | Entfernen Sie ein Etikett von einer Aufgabe. | Pfad: id,labelId | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
POST | /api/tasks/:id/accept-assignment | Nimmt eine an Sie delegierte Aufgabe an. Nur die aktuell zugewiesene Person darf annehmen. | Pfad: id | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
POST | /api/tasks/:id/bounce-assignment | Gibt eine delegierte Aufgabe zurück auf „nicht zugewiesen". Nur die aktuell zugewiesene Person darf sie zurückgeben. | Pfad: id, Text: reason (optional) | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
POST | /api/tasks/:id/dependencies | Markiert diese Aufgabe als abhängig von einer anderen eigenen Aufgabe. | Pfad: id, Text: dependsOnTaskId | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
DELETE | /api/tasks/:id/dependencies/:dependsOnTaskId | Entfernt eine Abhängigkeitsverknüpfung. | Pfad: id,dependsOnTaskId | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
Aufgaben-Checklisteneinträge
Teilschritte innerhalb einer einzelnen Aufgabe – zu unterscheiden von Aufgabenabhängigkeiten (die zwei getrennte Aufgaben verknüpfen) und von Routine-Vorlagen (die wiederkehrende Aufgaben definieren). Verwenden Sie dies für eine einmalige Aufgabe mit eigenen Schritten, z. B. „Geburtstagsparty planen" → „Location buchen", „Kuchen bestellen", „Einladungen verschicken".
| Methode | Pfad | Zweck | Anfrage oder Anfrage | Auth | Quelle |
|---|---|---|---|---|---|
GET | /api/tasks/:id/checklist-items | Listet die Checklisteneinträge einer Aufgabe, sortiert, auf. | Pfad: id | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
POST | /api/tasks/:id/checklist-items | Fügt einen Checklisteneintrag hinzu. Gibt die vollständige aktualisierte Checkliste zurück. | Pfad: id, Text: title | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
PATCH | /api/tasks/:id/checklist-items/:itemId | Benennt einen Eintrag um, ordnet ihn neu an oder hakt ihn ab. Gibt die vollständige aktualisierte Checkliste zurück. | Pfad: id,itemId, Text: teilweise title,isDone,order | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
DELETE | /api/tasks/:id/checklist-items/:itemId | Löscht einen Checklisteneintrag. Gibt die vollständige aktualisierte Checkliste zurück. | Pfad: id,itemId | JWT oder Benutzer-API-Schlüssel | tasks/tasks.controller.ts |
Aufgabenbeschriftungen
| Methode | Pfad | Zweck | Anfrage oder Anfrage | Auth | Quelle |
|---|---|---|---|---|---|
GET | /api/tasks/labels | Aufgabenbezeichnungen auflisten. | Keine | JWT oder Benutzerschlüssel API | tasks/task-labels.controller.ts |
POST | /api/tasks/labels | Erstellen Sie eine Aufgabenbezeichnung. | Körper: name,color | JWT oder Benutzerschlüssel API | tasks/task-labels.controller.ts |
PATCH | /api/tasks/labels/:id | Aktualisieren Sie eine Aufgabenbezeichnung. | Pfad: id, Text: Teilbeschriftungsfelder | JWT oder Benutzerschlüssel API | tasks/task-labels.controller.ts |
DELETE | /api/tasks/labels/:id | Löschen Sie eine Aufgabenbezeichnung. | Pfad: id | JWT oder Benutzerschlüssel API | tasks/task-labels.controller.ts |
GET | /api/task-labels | Legacy-Alias für die Label-Auflistung. | Keine | JWT oder Benutzerschlüssel API | tasks/task-labels.controller.ts |
POST | /api/task-labels | Legacy-Alias für die Etikettenerstellung. | Körper: name,color | JWT oder Benutzerschlüssel API | tasks/task-labels.controller.ts |
PATCH | /api/task-labels/:id | Legacy-Alias für die Etikettenaktualisierung. | Pfad: id | JWT oder Benutzerschlüssel API | tasks/task-labels.controller.ts |
DELETE | /api/task-labels/:id | Legacy-Alias zum Löschen von Labels. | Pfad: id | JWT oder Benutzerschlüssel API | tasks/task-labels.controller.ts |
Fordern Sie Formen an
Aufgabennutzlast
CreateTaskDto in backend-nestjs/src/tasks/dto/create-task.dto.ts
title: erforderlich, maximal 240 Zeichenbody: optional, max. 8000 ZeichenbodyFormat: optional, derzeit nurmarkdowncolor: optionale 6-stellige Hexadezimalfarbepriority: optionale Aufzählunghigh|medium|lowstatus: optionale Aufzählungtodo|in_progress|doneplace: optional, maximal 255 ZeichendueDate: optionale ISO-DatumszeichenfolgedueEnd: optionale ISO-DatumszeichenfolgedueTimezone: optional, maximal 100 ZeichenassigneeId: optionale GanzzahldurationMinutes: optionale Ganzzahl,1..1440– auf der Aufgabe erforderlich, bevor sie automatisch geplant werden kannautoScheduled: optionaler BooleanpreferredWindowStartHour/preferredWindowEndHour: optionale Ganzzahl,0..23– überschreibt das standardmäßige Suchfenster von 9–18 Uhr für die automatische Terminplanung dieser Aufgabecontext: optionale Aufzählungdeep_work|errand|admin|kid_safe|low_energy– wird von der automatischen Terminplanung verwendet (deep_workbevorzugt eine großzügigere Lücke)labelIds: optionales eindeutiges Ganzzahl-Array, maximal 12 Elemente
Entitätsstandardwerte von backend-nestjs/src/entities/task.entity.ts
bodyFormat:markdowncolor:#eab308priority:mediumstatus:todo
Delegations- und Abhängigkeits-Nutzlasten
BounceTaskAssignmentDto.reason: optionale Zeichenfolge, maximal 500 Zeichen – wird protokolliert, aber nicht in einer eigenen Audit-Tabelle gespeichertAddTaskDependencyDto.dependsOnTaskId: erforderliche positive Ganzzahl
Checklisteneintrags-Nutzlasten
CreateTaskChecklistItemDto
title: erforderlich, maximal 240 Zeichen
UpdateTaskChecklistItemDto (alles optional)
title: maximal 240 ZeichenisDone: Booleanorder: Ganzzahl – es gibt keinen eigenen Neuanordnungs-Endpunkt; setzen Sieorderdirekt auf den Einträgen, die Sie verschieben möchten
Die checklistItems einer Aufgabe sind nur bei GET /api/tasks/:id (dem Lesen einer einzelnen Aufgabe) enthalten, nicht in der paginierten Liste GET /api/tasks oder bei GET /api/tasks/focus – rufen Sie sie bei Bedarf für eine Listenansicht über die oben genannten dedizierten Endpunkte ab.
Focus-Abfrage
date: optionale Abfragezeichenfolge beiGET /api/tasks/focus,YYYY-MM-DD, Standard: heute (UTC)
Abfragefilter
QueryTasksDto
status: optionale Aufzählungtodo|in_progress|donepriority: optionale Aufzählunghigh|medium|lowsearch: optionale Zeichenfolge, maximal 120 ZeichendueFrom: optionale ISO-DatumszeichenfolgedueTo: optionale ISO-DatumszeichenfolgelabelIds: optionales eindeutiges Ganzzahl-Array, maximal 10 ElementesortBy:updatedAt|createdAt|dueDatesortDirection:asc|descpage: int>= 1, Standard1limit: int1..100, Standard25
Beschriften Sie Nutzlasten
CreateTaskLabelDto.name: erforderlich, maximal 64 ZeichenCreateTaskLabelDto.color: optionale 6-stellige HexadezimalfarbeUpdateTaskLabelsDto.labelIds: optionale IDs vorhandener LabelsUpdateTaskLabelsDto.inlineLabels: optionale neue Labels zum Erstellen und Anhängen in einem Aufruf
Beispielanrufe
Erstellen Sie eine Aufgabe
curl -X POST "$PRIMECAL_API/api/tasks" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Pack school bags",
"priority": "high",
"dueDate": "2026-03-30T18:00:00.000Z",
"dueTimezone": "Europe/Budapest",
"labelIds": [3, 7]
}'
Aufgaben filtern
curl "$PRIMECAL_API/api/tasks?status=todo&sortBy=updatedAt&sortDirection=desc&limit=25" \
-H "Authorization: Bearer $TOKEN"
Erstellen Sie ein Etikett
curl -X POST "$PRIMECAL_API/api/tasks/labels" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "School",
"color": "#14b8a6"
}'
Holen Sie sich die heutige Focus-Liste
curl "$PRIMECAL_API/api/tasks/focus?date=2026-07-05" \
-H "Authorization: Bearer $TOKEN"
Erstellen Sie eine Aufgabe mit Dauer und Kontext und planen Sie sie dann automatisch
curl -X POST "$PRIMECAL_API/api/tasks" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Write school newsletter",
"durationMinutes": 90,
"context": "deep_work"
}'
curl -X POST "$PRIMECAL_API/api/tasks/57/auto-schedule" \
-H "Authorization: Bearer $TOKEN"
Eine delegierte Aufgabe zurückgeben
curl -X POST "$PRIMECAL_API/api/tasks/58/bounce-assignment" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reason": "Forgot which bin is recycling this week"
}'
Eine Abhängigkeit hinzufügen
curl -X POST "$PRIMECAL_API/api/tasks/60/dependencies" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dependsOnTaskId": 59
}'
Einen Checklisteneintrag hinzufügen und abschließen
curl -X POST "$PRIMECAL_API/api/tasks/60/checklist-items" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Book the venue"
}'
curl -X PATCH "$PRIMECAL_API/api/tasks/60/checklist-items/12" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"isDone": true
}'
Hinweise zu Reaktion und Verhalten
- Aufgaben können über die Aufgaben-Kalender-Brücke mit gespiegelten Kalenderereignissen verknüpft werden, diese Verknüpfung wird jedoch in diesen DTOs nicht direkt konfiguriert.
POST /api/tasks/:id/labelsunterstützt sowohl vorhandene Etiketten als auch die Inline-Etikettenerstellung.- Aufgabenbeschriftungsrouten werden aus Kompatibilitätsgründen absichtlich unter dem alten Pfad
/api/task-labelsdupliziert. GET /api/tasks/focusschließtdone-Aufgaben und jede Aufgabe mit einer unerledigten Abhängigkeit aus, sortiert nach Fälligkeitsdatum (null-Werte zuletzt), dann nach Routine-Eintragsreihenfolge, dann nach Erstellungszeit.POST /api/tasks/:id/auto-scheduleerfordert, dassdurationMinutesfür die Aufgabe gesetzt ist; andernfalls liefert es400. Wird innerhalb des prioritätsbasierten Suchhorizonts keine freie Lücke gefunden, wird der Planungsstatus der Aufgabe aufunscheduledgesetzt, statt einen Fehler auszulösen.POST /api/tasks/:id/accept-assignmentundPOST /api/tasks/:id/bounce-assignmentliefern beide403, wenn der Aufrufer nicht die aktuell zugewiesene Person der Aufgabe ist.POST /api/tasks/:id/dependenciesweist Selbstverweise und den direkten Zwei-Aufgaben-Zyklus (Bhängt vonAab, währendAbereits vonBabhängt) mit400zurück. Längere Abhängigkeitsketten werden nicht geprüft.- Eine Änderung des
statuseiner Aufgabe löst den Automatisierungs-Triggertask.status_changedfür jede Regel aus, die darauf lauscht. - Alle Checklisteneintrags-Endpunkte geben die gesamte aktualisierte Checkliste der Aufgabe zurück (nicht nur den betroffenen Eintrag), sortiert nach
orderdannid– am einfachsten ersetzt ein Client damit einfach seine lokale Liste durch die Antwort. - Checklisteneinträge haben keine eigene Besitzer-Spalte; jeder Checklisten-Endpunkt prüft zunächst, ob der Aufrufer Eigentümer der übergeordneten Aufgabe ist, bevor er auf den Eintrag zugreift.
Best Practices
- Verwenden Sie
sortBy=updatedAtund einen kleinenlimitfür interaktive Aufgabenlisten. - Bevorzugen Sie
labelIdsbeim Anhängen bekannter Labels undinlineLabelsnur, wenn das Label wirklich noch nicht existiert. - Halten Sie
dueTimezoneexplizit für Aufgaben, die über Zeitzonen hinweg gespiegelt oder interpretiert werden können. - Setzen Sie
durationMinutesund, falls relevant,context, bevor Sieauto-scheduleaufrufen – die automatische Terminplanung verschiebt nurdueDate/dueEnd, sie erstellt niemals die Aufgabe. - Behandeln Sie den
reasonvonbounce-assignmentals informellen Kontext für die Person, die die Aufgabe neu zuweist, nicht als dauerhaft gespeicherten Audit-Trail. - Behandeln Sie
/api/tasks/labelsals kanonischen Labelpfad und/api/task-labelsals Kompatibilitätsroute.