Tareas
Las tareas representan actividades operativas de cultivo como riego, fertilizacion, poda y cosecha. Esta API permite crear, asignar y dar seguimiento a las tareas del equipo, con soporte para filtros avanzados, prioridades y tareas recurrentes.
La API de Tareas es actualmente una implementacion mocked. Todas las operaciones funcionan correctamente pero no persisten datos en un backend real.
El modelo de Tarea
- Name
id- Type
- string
- Description
Identificador unico de la tarea.
- Name
title- Type
- string
- Description
Titulo de la tarea.
- Name
description- Type
- string
- Description
Descripcion detallada de la tarea.
- Name
type- Type
- string
- Description
Tipo de tarea (e.g.,
watering,fertilizing,pruning,harvesting, etc.).
- Name
priority- Type
- string
- Description
Prioridad de la tarea.
- Name
status- Type
- string
- Description
Estado actual de la tarea.
- Name
dueDate- Type
- string
- Description
Fecha limite para completar la tarea.
- Name
estimatedMinutes- Type
- number
- Description
Tiempo estimado en minutos para completar la tarea.
- Name
assignedToId- Type
- string
- Description
ID del miembro del equipo asignado.
- Name
assignedToName- Type
- string
- Description
Nombre del miembro asignado.
- Name
assignedToRole- Type
- string
- Description
Rol del miembro asignado.
- Name
cropId- Type
- string
- Description
ID del cultivo asociado.
- Name
cropName- Type
- string
- Description
Nombre del cultivo asociado.
- Name
recurring- Type
- boolean
- Description
Indica si la tarea es recurrente.
- Name
notes- Type
- string
- Description
Notas adicionales sobre la tarea.
- Name
completedAt- Type
- string
- Description
Fecha y hora de completado.
- Name
completedBy- Type
- string
- Description
ID del usuario que completo la tarea.
- Name
createdAt- Type
- timestamp
- Description
Fecha de creacion del registro.
- Name
updatedAt- Type
- timestamp
- Description
Ultima actualizacion.
Ejemplo de tarea
{
"id": "task-001",
"title": "Riego matutino - Blue Dream Batch A",
"description": "Regar con solucion pH 6.2, EC 1.4",
"type": "watering",
"priority": "high",
"status": "pending",
"dueDate": "2024-10-31T08:00:00Z",
"estimatedMinutes": 30,
"assignedToId": "usr_01HQ8XYZABC123",
"assignedToName": "Carlos Lopez",
"assignedToRole": "GROWER",
"cropId": "crop-001",
"cropName": "Blue Dream Indoor Batch A",
"recurring": true,
"notes": "Verificar drenaje despues del riego",
"completedAt": null,
"completedBy": null,
"createdAt": "2024-10-30T10:00:00Z",
"updatedAt": "2024-10-30T10:00:00Z"
}
Listar tareas
Este endpoint permite obtener una lista filtrada y paginada de tareas.
Parametros de Consulta
- Name
type- Type
- string
- Description
Filtrar por tipo de tarea (e.g.,
watering,fertilizing,pruning,harvesting).
- Name
priority- Type
- string
- Description
Filtrar por prioridad.
- Name
status- Type
- string
- Description
Filtrar por estado.
- Name
cropId- Type
- string
- Description
Filtrar por cultivo asociado.
- Name
assignedToId- Type
- string
- Description
Filtrar por miembro asignado.
- Name
search- Type
- string
- Description
Busqueda por titulo o descripcion.
- Name
dateFrom- Type
- string
- Description
Fecha minima (filtro por
dueDate).
- Name
dateTo- Type
- string
- Description
Fecha maxima (filtro por
dueDate).
- Name
page- Type
- number
- Description
Numero de pagina.
- Name
limit- Type
- number
- Description
Cantidad de resultados por pagina.
Request
curl -G https://api.cannahub.tech/api/tasks \
-H "Authorization: Bearer {token}" \
-d type=watering \
-d status=pending \
-d cropId=crop-001
Response
{
"tasks": [
{
"id": "task-001",
"title": "Riego matutino - Blue Dream Batch A",
"type": "watering",
"priority": "high",
"status": "pending",
"dueDate": "2024-10-31T08:00:00Z",
"estimatedMinutes": 30,
"assignedToName": "Carlos Lopez",
"cropName": "Blue Dream Indoor Batch A"
}
],
"count": 1,
"filters": {
"type": "watering",
"status": "pending",
"cropId": "crop-001"
}
}
Crear tarea
Este endpoint permite crear una nueva tarea.
Campos Requeridos
- Name
title- Type
- string
- Description
Titulo de la tarea.
- Name
type- Type
- string
- Description
Tipo de tarea (e.g.,
watering,fertilizing,pruning,harvesting).
- Name
dueDate- Type
- string
- Description
Fecha limite para completar la tarea.
- Name
estimatedMinutes- Type
- number
- Description
Tiempo estimado en minutos.
Campos Opcionales
- Name
description- Type
- string
- Description
Descripcion detallada.
- Name
priority- Type
- string
- Description
Prioridad de la tarea.
- Name
cropId- Type
- string
- Description
ID del cultivo asociado.
- Name
cropName- Type
- string
- Description
Nombre del cultivo asociado.
- Name
assignedToId- Type
- string
- Description
ID del miembro asignado.
- Name
assignedToName- Type
- string
- Description
Nombre del miembro asignado.
- Name
assignedToRole- Type
- string
- Description
Rol del miembro asignado.
- Name
recurring- Type
- boolean
- Description
Si la tarea es recurrente.
- Name
notes- Type
- string
- Description
Notas adicionales.
Request
curl -X POST https://api.cannahub.tech/api/tasks \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"title": "Fertilizar OG Kush Lote B",
"type": "fertilizing",
"dueDate": "2024-11-01T10:00:00Z",
"estimatedMinutes": 45,
"priority": "medium",
"cropId": "crop-002",
"cropName": "OG Kush Outdoor",
"assignedToId": "usr_01HQ8XYZABC456",
"assignedToName": "Ana Martinez",
"assignedToRole": "GROWER",
"notes": "Usar Bio Grow 4ml/L"
}'
Response (201)
{
"task": {
"id": "task-1698765432100",
"title": "Fertilizar OG Kush Lote B",
"type": "fertilizing",
"priority": "medium",
"status": "pending",
"dueDate": "2024-11-01T10:00:00Z",
"estimatedMinutes": 45,
"assignedToId": "usr_01HQ8XYZABC456",
"assignedToName": "Ana Martinez",
"assignedToRole": "GROWER",
"cropId": "crop-002",
"cropName": "OG Kush Outdoor",
"notes": "Usar Bio Grow 4ml/L",
"createdAt": "2024-10-31T10:00:00Z"
}
}
Obtener tarea
Este endpoint retorna los detalles de una tarea especifica.
Request
curl https://api.cannahub.tech/api/tasks/task-001 \
-H "Authorization: Bearer {token}"
Response
{
"task": {
"id": "task-001",
"title": "Riego matutino - Blue Dream Batch A",
"description": "Regar con solucion pH 6.2, EC 1.4",
"type": "watering",
"priority": "high",
"status": "pending",
"dueDate": "2024-10-31T08:00:00Z",
"estimatedMinutes": 30,
"assignedToId": "usr_01HQ8XYZABC123",
"assignedToName": "Carlos Lopez",
"assignedToRole": "GROWER",
"cropId": "crop-001",
"cropName": "Blue Dream Indoor Batch A",
"recurring": true,
"notes": "Verificar drenaje despues del riego",
"completedAt": null,
"completedBy": null,
"createdAt": "2024-10-30T10:00:00Z",
"updatedAt": "2024-10-30T10:00:00Z"
}
}
Actualizar tarea
Este endpoint permite actualizar los datos de una tarea. Todos los campos son opcionales.
Campos Actualizables
- Name
title- Type
- string
- Description
Titulo de la tarea.
- Name
description- Type
- string
- Description
Descripcion detallada.
- Name
type- Type
- string
- Description
Tipo de tarea.
- Name
priority- Type
- string
- Description
Prioridad.
- Name
status- Type
- string
- Description
Estado de la tarea.
- Name
dueDate- Type
- string
- Description
Fecha limite.
- Name
estimatedMinutes- Type
- number
- Description
Tiempo estimado en minutos.
- Name
assignedToId- Type
- string
- Description
ID del miembro asignado.
- Name
assignedToName- Type
- string
- Description
Nombre del asignado.
- Name
assignedToRole- Type
- string
- Description
Rol del asignado.
- Name
cropId- Type
- string
- Description
Cultivo asociado.
- Name
cropName- Type
- string
- Description
Nombre del cultivo.
- Name
recurring- Type
- boolean
- Description
Si es recurrente.
- Name
notes- Type
- string
- Description
Notas adicionales.
- Name
completedAt- Type
- string
- Description
Fecha de completado.
- Name
completedBy- Type
- string
- Description
ID del usuario que completo la tarea.
Request
curl -X PATCH https://api.cannahub.tech/api/tasks/task-001 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"priority": "urgent",
"notes": "Plantas muestran signos de deshidratacion"
}'
Response
{
"task": {
"id": "task-001",
"title": "Riego matutino - Blue Dream Batch A",
"priority": "urgent",
"status": "completed",
"completedAt": "2024-10-31T09:15:00Z",
"completedBy": "usr_01HQ8XYZABC123",
"updatedAt": "2024-10-31T09:15:00Z"
}
}
Eliminar tarea
Este endpoint elimina una tarea del sistema.
La eliminacion es permanente. Considera marcar la tarea como completada o cancelada en lugar de eliminarla para mantener el historial.
Request
curl -X DELETE https://api.cannahub.tech/api/tasks/task-001 \
-H "Authorization: Bearer {token}"
Response
{
"success": true
}
Listar miembros del equipo
Este endpoint retorna los miembros del equipo disponibles para asignacion de tareas.
Parametros de Consulta
- Name
role- Type
- string
- Description
Filtrar por rol del miembro. Valores:
GROWER,TRIMMER,SUPERVISOR,ALL.
Request
curl -G https://api.cannahub.tech/api/tasks/team-members \
-H "Authorization: Bearer {token}" \
-d role=GROWER
Response
{
"members": [
{
"id": "usr_01HQ8XYZABC123",
"name": "Carlos Lopez",
"role": "GROWER"
},
{
"id": "usr_01HQ8XYZABC456",
"name": "Ana Martinez",
"role": "GROWER"
}
],
"count": 2
}
React Query Hooks
Cannahub provee hooks de React Query para gestionar tareas.
Query Keys
export const taskKeys = {
all: ['tasks'] as const,
lists: () => [...taskKeys.all, 'list'] as const,
list: (filters?: TaskFilters) => [...taskKeys.lists(), filters] as const,
details: () => [...taskKeys.all, 'detail'] as const,
detail: (id: string) => [...taskKeys.details(), id] as const,
teamMembers: () => [...taskKeys.all, 'team-members'] as const,
}
Queries
import { useTasksQuery, useTaskQuery, useTeamMembersQuery } from '@/features/Club/Tasks/hooks'
// Listar tareas con filtros
const { data } = useTasksQuery({ type: 'watering', status: 'pending' })
// Obtener tarea individual
const { data: task } = useTaskQuery('task-001')
// Listar miembros del equipo para asignacion
const { data: members } = useTeamMembersQuery({ role: 'GROWER' })
Mutations
import {
useCreateTaskMutation,
useUpdateTaskMutation,
useDeleteTaskMutation
} from '@/features/Club/Tasks/hooks'
// Crear tarea
const { mutate: createTask } = useCreateTaskMutation()
createTask({
title: 'Poda apical - Sour Diesel',
type: 'pruning',
dueDate: '2024-11-02T10:00:00Z',
estimatedMinutes: 60,
assignedToId: 'usr_01HQ8XYZABC123'
})
// Actualizar tarea (e.g., marcar como completada)
const { mutate: updateTask } = useUpdateTaskMutation()
updateTask({
taskId: 'task-001',
data: {
status: 'completed',
completedAt: new Date().toISOString(),
completedBy: currentUserId
}
})
// Eliminar tarea
const { mutate: deleteTask } = useDeleteTaskMutation()
deleteTask('task-001')