Aller au contenu

API : Tâches

{
"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 vaut PENDING, IN_PROGRESS ou DONE (les sous-tâches restent binaires : PENDING/DONE). blockedReason est non-null lorsque la tâche est signalée comme bloquée — il est effacé automatiquement lorsque la tâche est terminée. priority, description, dueDate, listId et assignee sont nullables. version s’incrémente à chaque modification et sert au verrouillage optimiste.

Lorsqu’un membre est retiré d’un espace de travail, les tâches qu’il a créées sont réattribuées à un « Utilisateur inactif » réservé et ses assignations sont effacées. Sur ces tâches, creator.inactive vaut true — affiche un libellé générique plutôt que le nom fictif.

GET /api/workspaces/{workspaceId}/tasks

Renvoie toutes les tâches de l’espace de travail sous forme de tableau d’objets tâche (pas encore de pagination). Filtre côté client par status, listId ou personne assignée.

La requête peut porter un id généré côté client (UUIDv4/v7) — obligatoire lorsqu’un en-tête X-Op-Id est envoyé, pour que les rejeux et les opérations suivantes en file d’attente puissent référencer la tâche avant même que le serveur ne l’ait vue.

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

Seul title est obligatoire. Renvoie 201 avec { "id": "…" }.

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

Mise à jour par masque de champs pour la synchronisation hors ligne : seuls les champs présents dans le corps changent ; un null explicite vide le champ. Champs patchables : title, description, priority, dueDate, listId, assigneeId, blockedReason (un null explicite ou une valeur vide débloque ; ignoré sur les tâches DONE). Contrairement au PUT, il n’y a pas de contrôle de version — les modifications concurrentes du même champ se résolvent selon le principe « dernier écrivain gagnant », dans l’ordre d’arrivée. Renvoie 204. Erreurs : 400 pour un titre vide, 404 pour une tâche inconnue.

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

Mise à jour complète — envoie tous les champs plus la version que tu as lue en dernier :

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

Renvoie 200. Une version obsolète répond 409 — relis puis réessaie. assigneeId doit être un membre de l’espace de travail ; null retire l’assignation.

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

Accepte PENDING, IN_PROGRESS ou DONE ; passer à DONE efface aussi blockedReason. Renvoie 200. Ce raccourci ne requiert pas de version.

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

Renvoie 201 avec { "id": "…" }. Les copies restent dans le même espace de travail ; les pièces jointes ne sont jamais copiées. Les booléens omis prennent les valeurs par défaut indiquées.

Déplacer une tâche vers un autre espace de travail

Section intitulée « Déplacer une tâche vers un autre espace de travail »
POST /api/workspaces/{workspaceId}/tasks/{taskId}/move
{ "targetWorkspaceId": "019f…" }

Renvoie 200. Tu dois être membre des deux espaces de travail. La personne assignée est retirée sauf si elle est aussi membre de l’espace cible ; l’affectation à une liste est retirée ; les pièces jointes suivent la tâche. Répond 413 si la limite de stockage de l’espace de travail cible serait dépassée.

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

Renvoie 204. Supprime la tâche avec ses sous-tâches et ses références de pièces jointes.