Przejdź do głównej zawartości

API: Zadania

{
"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 przyjmuje wartości PENDING, IN_PROGRESS lub DONE (podzadania pozostają binarne: PENDING/DONE). blockedReason jest niepusty, gdy zadanie jest oznaczone jako zablokowane — czyści się automatycznie po ukończeniu zadania. priority, description, dueDate, listId i assignee mogą być null. version rośnie przy każdej zmianie i chroni blokowanie optymistyczne.

Gdy członek zostaje usunięty z obszaru roboczego, utworzone przez niego zadania są przypisywane do zarezerwowanego „Nieaktywnego użytkownika”, a jego przypisania są czyszczone. W tych zadaniach creator.inactive ma wartość true — wyświetl ogólną etykietę zamiast nazwy zastępczej.

GET /api/workspaces/{workspaceId}/tasks

Zwraca wszystkie zadania obszaru roboczego jako tablicę obiektów zadań (na razie bez paginacji). Filtruj po stronie klienta według status, listId lub osoby przypisanej.

Żądanie może zawierać wygenerowane po stronie klienta id (UUIDv4/v7) — wymagane, gdy wysyłany jest nagłówek X-Op-Id, aby powtórzenia i kolejne operacje z kolejki mogły odwoływać się do zadania, zanim serwer w ogóle je zobaczy.

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

Wymagane jest tylko title. Zwraca 201 z { "id": "…" }.

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

Aktualizacja z maską pól na potrzeby synchronizacji offline: zmieniają się tylko pola obecne w treści; jawny null czyści pole. Pola dostępne do zmiany: title, description, priority, dueDate, listId, assigneeId, blockedReason (jawny null lub pusta wartość odblokowuje; ignorowany dla zadań DONE). W odróżnieniu od PUT nie ma kontroli version — równoczesne zmiany tego samego pola rozstrzyga kolejność nadejścia: wygrywa ostatni zapis. Zwraca 204. Błędy: 400 dla pustego tytułu, 404 dla nieznanego zadania.

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

Pełna aktualizacja — wyślij każde pole plus version, którą ostatnio odczytałeś:

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

Zwraca 200. Nieaktualna version daje odpowiedź 409 — odczytaj ponownie i spróbuj jeszcze raz. assigneeId musi być członkiem obszaru roboczego; null usuwa przypisanie.

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

Przyjmuje PENDING, IN_PROGRESS lub DONE; ustawienie DONE czyści też blockedReason. Zwraca 200. Ten skrót nie wymaga version.

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

Zwraca 201 z { "id": "…" }. Kopie pozostają w tym samym obszarze roboczym; załączniki nigdy nie są kopiowane. Pominięte wartości logiczne przyjmują domyślne wartości pokazane powyżej.

POST /api/workspaces/{workspaceId}/tasks/{taskId}/move
{ "targetWorkspaceId": "019f…" }

Zwraca 200. Musisz być członkiem obu obszarów roboczych. Przypisanie osoby jest czyszczone, chyba że jest ona również członkiem docelowego obszaru; przypisanie do listy jest czyszczone; załączniki przenoszą się razem z zadaniem. Odpowiada 413, gdy limit przestrzeni docelowego obszaru roboczego zostałby przekroczony.

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

Zwraca 204. Usuwa zadanie razem z jego podzadaniami i odwołaniami do załączników.