Espacios
Los espacios representan las areas fisicas donde se realizan los cultivos (salas de vegetativo, floracion, secado, etc.). Esta API permite gestionar espacios, sus sensores y la asignacion de cultivos.
La API de Espacios es actualmente una implementacion mocked. Los datos no persisten en un backend real.
El modelo de Espacio
- Name
id- Type
- string
- Description
Identificador unico del espacio.
- Name
name- Type
- string
- Description
Nombre del espacio.
- Name
description- Type
- string
- Description
Descripcion del espacio.
- Name
squareMeters- Type
- number
- Description
Superficie en metros cuadrados.
- Name
status- Type
- SpaceStatus
- Description
Estado actual:
ACTIVE,INACTIVE,MAINTENANCE,EMPTY.
- Name
type- Type
- SpaceType
- Description
Tipo de espacio.
- Name
lights- Type
- Light[]
- Description
Luces instaladas.
- Name
crops- Type
- Crop[]
- Description
Cultivos en el espacio.
- Name
sensors- Type
- Sensor[]
- Description
Sensores ambientales.
- Name
totalPlants- Type
- number
- Description
Cantidad total de plantas.
- Name
createdAt- Type
- timestamp
- Description
Fecha de creacion.
- Name
updatedAt- Type
- timestamp
- Description
Ultima actualizacion.
Ejemplo de espacio
{
"id": "space-001",
"name": "Sala de Floracion A",
"description": "Sala principal de floracion con LED",
"squareMeters": 20,
"status": "ACTIVE",
"type": "flowering",
"lights": [
{ "id": "light-001", "name": "LED 600W", "type": "LED" }
],
"crops": [
{ "id": "crop-001", "name": "Blue Dream Batch A" }
],
"sensors": [
{ "id": "sensor-001", "type": "TEMPERATURE", "value": "24.5", "unit": "°C" },
{ "id": "sensor-002", "type": "HUMIDITY", "value": "55", "unit": "%" }
],
"totalPlants": 12,
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-10-01T14:30:00Z"
}
Tipos de Espacio (SpaceType)
| Tipo | Descripcion |
|---|---|
fullCycle | Ciclo completo (veg + flora) |
vegetative | Solo vegetativo |
flowering | Solo floracion |
germination | Germinacion |
cloning | Clonacion/esquejes |
propagation | Propagacion |
drying | Secado |
curing | Curado |
watering | Riego (hidroponia) |
harvest | Cosecha |
Estados (SpaceStatus)
| Estado | Descripcion |
|---|---|
ACTIVE | En uso activo |
INACTIVE | Desactivado |
MAINTENANCE | En mantenimiento |
EMPTY | Vacio, disponible |
Tipos de Sensor (SensorType)
| Tipo | Descripcion | Unidad |
|---|---|---|
TEMPERATURE | Temperatura | °C |
HUMIDITY | Humedad relativa | % |
VPD | Deficit de presion de vapor | kPa |
CO2 | Dioxido de carbono | ppm |
SOIL_MOISTURE | Humedad del suelo | % |
PH | pH del agua/sustrato | - |
EC | Conductividad electrica | mS/cm |
Listar espacios
Parametros de Consulta
- Name
status- Type
- SpaceStatus
- Description
Filtrar por estado.
- Name
type- Type
- SpaceType
- Description
Filtrar por tipo.
- Name
search- Type
- string
- Description
Busqueda por nombre.
Request
curl -G https://api.cannahub.tech/api/spaces \
-H "Authorization: Bearer {token}" \
-d status=ACTIVE \
-d type=flowering
Response
{
"spaces": [...],
"count": 3,
"filters": { "status": "ACTIVE", "type": "flowering" }
}
Crear espacio
Campos Requeridos
- Name
name- Type
- string
- Description
Nombre del espacio.
- Name
type- Type
- SpaceType
- Description
Tipo de espacio.
- Name
squareMeters- Type
- number
- Description
Superficie en m2.
Request
curl -X POST https://api.cannahub.tech/api/spaces \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Sala de Vegetativo B",
"type": "vegetative",
"squareMeters": 15,
"description": "Nueva sala de vegetativo"
}'
Response (201)
{
"space": {
"id": "space-1698765432100",
"name": "Sala de Vegetativo B",
"type": "vegetative",
"squareMeters": 15,
"status": "EMPTY"
}
}
Obtener espacio
Retorna los detalles de un espacio especifico.
Request
curl https://api.cannahub.tech/api/spaces/space-001 \
-H "Authorization: Bearer {token}"
Response
{
"space": {
"id": "space-001",
"name": "Sala de Floracion A",
"type": "flowering",
"status": "ACTIVE",
"crops": [...],
"sensors": [...]
}
}
Actualizar espacio
Actualiza los datos de un espacio.
Request
curl -X PATCH https://api.cannahub.tech/api/spaces/space-001 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{ "status": "MAINTENANCE" }'
Response
{
"space": {
"id": "space-001",
"status": "MAINTENANCE",
"updatedAt": "2024-10-31T10:00:00Z"
}
}
Eliminar espacio
Elimina un espacio del sistema.
No se puede eliminar un espacio con cultivos activos.
Request
curl -X DELETE https://api.cannahub.tech/api/spaces/space-001 \
-H "Authorization: Bearer {token}"
Response
{ "success": true }
React Query Hooks
Uso de hooks
import {
useSpacesQuery,
useSpaceQuery,
useCreateSpaceMutation,
useUpdateSpaceMutation,
useDeleteSpaceMutation
} from '@/features/Club/Spaces/hooks'
// Listar espacios con filtros
const { data: spaces, isLoading } = useSpacesQuery({
status: 'ACTIVE',
type: 'flowering'
})
// Obtener un espacio
const { data: space } = useSpaceQuery('space-001')
// Crear espacio
const createMutation = useCreateSpaceMutation()
await createMutation.mutateAsync({
name: 'Sala Vegetativo C',
type: 'vegetative',
squareMeters: 12
})
// Actualizar espacio
const updateMutation = useUpdateSpaceMutation()
await updateMutation.mutateAsync({
id: 'space-001',
data: { status: 'MAINTENANCE' }
})
// Eliminar espacio
const deleteMutation = useDeleteSpaceMutation()
await deleteMutation.mutateAsync('space-001')
Query Keys
spaceKeys = {
all: ['spaces'],
lists: () => ['spaces', 'list'],
list: (filters) => ['spaces', 'list', filters],
details: () => ['spaces', 'detail'],
detail: (id) => ['spaces', 'detail', id]
}