Salta ai contenuti

API: Attività

{
"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 è PENDING, IN_PROGRESS o DONE (le sottoattività restano binarie: PENDING/DONE). blockedReason non è null quando l’attività è contrassegnata come bloccata — viene azzerato automaticamente al completamento dell’attività. priority, description, dueDate, listId e assignee possono essere null. version si incrementa a ogni modifica e protegge il locking ottimistico.

Quando un membro viene rimosso da uno spazio di lavoro, le attività di cui è autore vengono riassegnate a un «Utente inattivo» riservato e le sue assegnazioni vengono azzerate. Su quelle attività creator.inactive è true — mostra un’etichetta generica invece del nome segnaposto.

GET /api/workspaces/{workspaceId}/tasks

Restituisce tutte le attività dello spazio di lavoro come array di oggetti attività (per ora senza paginazione). Filtra lato client per status, listId o assegnatario.

La richiesta può portare un id generato dal client (UUIDv4/v7) — obbligatorio quando viene inviato un header X-Op-Id, così che le ripetizioni e le operazioni successive in coda possano fare riferimento all’attività prima ancora che il server l’abbia vista.

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

Solo title è obbligatorio. Restituisce 201 con { "id": "…" }.

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

Aggiornamento con maschera di campi per la sincronizzazione offline: cambiano solo i campi presenti nel corpo; un null esplicito svuota il campo. Campi modificabili via patch: title, description, priority, dueDate, listId, assigneeId, blockedReason (un null esplicito o un valore vuoto sblocca; ignorato sulle attività DONE). A differenza della PUT, non c’è alcun controllo di version — le modifiche concorrenti allo stesso campo si risolvono in ordine di arrivo: vince l’ultimo che scrive. Restituisce 204. Errori: 400 per un titolo vuoto, 404 per un’attività sconosciuta.

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

Aggiornamento completo — invia tutti i campi più la version che hai letto per ultima:

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

Restituisce 200. Una version obsoleta risponde 409 — rileggi e riprova. assigneeId deve essere un membro dello spazio di lavoro; null rimuove l’assegnazione.

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

Accetta PENDING, IN_PROGRESS o DONE; impostare DONE azzera anche blockedReason. Restituisce 200. Questa scorciatoia non richiede alcuna version.

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

Restituisce 201 con { "id": "…" }. Le copie rimangono nello stesso spazio di lavoro; gli allegati non vengono mai copiati. I booleani omessi assumono i valori predefiniti mostrati.

Spostare un’attività in un altro spazio di lavoro

Sezione intitolata “Spostare un’attività in un altro spazio di lavoro”
POST /api/workspaces/{workspaceId}/tasks/{taskId}/move
{ "targetWorkspaceId": "019f…" }

Restituisce 200. Devi essere membro di entrambi gli spazi di lavoro. L’assegnatario viene rimosso a meno che non sia anche membro dello spazio di destinazione; l’assegnazione alla lista viene rimossa; gli allegati si spostano insieme all’attività. Risponde 413 quando il limite di archiviazione dello spazio di lavoro di destinazione verrebbe superato.

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

Restituisce 204. Elimina l’attività con le sue sottoattività e i riferimenti agli allegati.