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.


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"
}

GET/api/tasks

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

GET
/api/tasks
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"
  }
}

POST/api/tasks

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

POST
/api/tasks
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"
  }
}

GET/api/tasks/:taskId

Obtener tarea

Este endpoint retorna los detalles de una tarea especifica.

Request

GET
/api/tasks/:taskId
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"
  }
}

PATCH/api/tasks/:taskId

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

PATCH
/api/tasks/:taskId
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"
  }
}

DELETE/api/tasks/:taskId

Eliminar tarea

Este endpoint elimina una tarea del sistema.

Request

DELETE
/api/tasks/:taskId
curl -X DELETE https://api.cannahub.tech/api/tasks/task-001 \
  -H "Authorization: Bearer {token}"

Response

{
  "success": true
}

GET/api/tasks/team-members

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

GET
/api/tasks/team-members
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')

Proximos Pasos

Was this page helpful?