Zum Inhalt springen

API: Aufgaben

{
"id": "019f74a1-…",
"workspaceId": "019f7464-…",
"title": "Buy paint",
"description": "Matte white, 10l",
"priority": "HIGH",
"status": "PENDING",
"blockedReason": null,
"dueDate": "2026-08-01T00:00:00Z",
"listId": "019f7488-…",
"creator": { "userId": "019f…", "firstName": "Greta", "lastName": "Lengl", "avatarUrl": null, "inactive": false },
"assignee": null,
"version": 3,
"subtasks": [
{ "id": "019f…", "title": "Compare prices", "status": "DONE" }
],
"attachments": [
{ "id": "019f…", "fileName": "color-sample.jpg", "mediaType": "image/jpeg", "sizeBytes": 182734 }
],
"createdAt": "2026-07-18T09:30:00Z"
}

status ist PENDING, IN_PROGRESS oder DONE (Unteraufgaben bleiben binär: PENDING/DONE). blockedReason ist ungleich null, wenn die Aufgabe als blockiert markiert ist — es wird automatisch geleert, sobald die Aufgabe abgeschlossen wird. priority, description, dueDate, listId und assignee können null sein. version zählt bei jeder Änderung hoch und sichert das Optimistic Locking ab.

Wenn ein Mitglied aus einem Arbeitsbereich entfernt wird, werden die von ihm erstellten Aufgaben einem reservierten „Inaktiver Nutzer“ neu zugeordnet und ihre Zuweisungen aufgehoben. Bei diesen Aufgaben ist creator.inactive gleich true — zeige eine allgemeine Bezeichnung an statt des Platzhalter-Namens.

GET /api/workspaces/{workspaceId}/tasks

Liefert alle Aufgaben des Arbeitsbereichs als Array von Aufgaben-Objekten (noch keine Paginierung). Filtere clientseitig nach status, listId oder der zugewiesenen Person.

Die Anfrage darf eine clientseitig generierte id (UUIDv4/v7) enthalten — erforderlich, wenn ein X-Op-Id-Header gesendet wird, damit Wiederholungen und gepufferte Folge-Operationen die Aufgabe referenzieren können, bevor der Server sie je gesehen hat.

POST /api/workspaces/{workspaceId}/tasks
{
"title": "Buy paint",
"description": "Matte white, 10l",
"priority": "HIGH",
"dueDate": "2026-08-01T00:00:00Z",
"listId": "019f7488-…"
}

Nur title ist erforderlich. Liefert 201 mit { "id": "…" }.

PATCH /api/workspaces/{workspaceId}/tasks/{taskId}/fields
{ "title": "New title", "dueDate": null }

Feldmaskiertes Update für die Offline-Synchronisierung: Nur die im Body vorhandenen Felder ändern sich; ein explizites null leert ein Feld. Patchbar: title, description, priority, dueDate, listId, assigneeId, blockedReason (ein explizites null oder ein leerer Wert hebt die Blockierung auf; bei DONE-Aufgaben ignoriert). Anders als beim PUT gibt es keine version-Prüfung — konkurrierende Änderungen am selben Feld werden in Ankunftsreihenfolge aufgelöst, der letzte Schreiber gewinnt. Liefert 204. Fehler: 400 bei leerem Titel, 404 bei unbekannter Aufgabe.

PUT /api/workspaces/{workspaceId}/tasks/{taskId}

Vollständiges Update — sende jedes Feld plus die zuletzt gelesene version:

{
"title": "Buy paint",
"description": null,
"priority": "NORMAL",
"dueDate": "2026-08-01T00:00:00Z",
"listId": null,
"assigneeId": "019f…",
"version": 3
}

Liefert 200. Eine veraltete version wird mit 409 beantwortet — erneut lesen und wiederholen. assigneeId muss ein Mitglied des Arbeitsbereichs sein; null hebt die Zuweisung auf.

PATCH /api/workspaces/{workspaceId}/tasks/{taskId}
{ "status": "IN_PROGRESS" }

Akzeptiert PENDING, IN_PROGRESS oder DONE; das Setzen auf DONE leert zudem blockedReason. Liefert 200. Diese Abkürzung braucht keine version.

POST /api/workspaces/{workspaceId}/tasks/{taskId}/copy
{
"name": "Buy paint (copy)",
"preserveCreator": false,
"preserveAssignee": false,
"includeSubtasks": true,
"listId": null
}

Liefert 201 mit { "id": "…" }. Kopien bleiben im selben Arbeitsbereich; Anhänge werden nie mitkopiert. Weggelassene Booleans haben die gezeigten Standardwerte.

Eine Aufgabe in einen anderen Arbeitsbereich verschieben

Abschnitt betitelt „Eine Aufgabe in einen anderen Arbeitsbereich verschieben“
POST /api/workspaces/{workspaceId}/tasks/{taskId}/move
{ "targetWorkspaceId": "019f…" }

Liefert 200. Du musst Mitglied beider Arbeitsbereiche sein. Die Zuweisung wird entfernt, außer die zugewiesene Person ist auch Mitglied des Ziels; die Listenzuordnung wird entfernt; Anhänge wandern mit der Aufgabe mit. Antwortet mit 413, wenn das Speicherlimit des Ziel-Arbeitsbereichs überschritten würde.

DELETE /api/workspaces/{workspaceId}/tasks/{taskId}

Liefert 204. Löscht die Aufgabe mitsamt ihren Unteraufgaben und Anhang-Referenzen.