Un sistema completo de API REST para la optimización y gestión del uso de recursos agrícolas desarrollado como proyecto Integrador.
API AGROSIG BACKEND es una aplicación construida con Node.js y Express que proporciona endpoints para la gestión de usuarios y de la agricultura, siendo una herramienta que permite a los agricultores optimizar el uso de sus recursos. El sistema está diseñado para ser escalable y fácil de mantener, utilizando PostgreSQL como base de datos.
- ✅ Autenticación JWT con refresh tokens
- ✅ Gestión de usuarios con roles (admin/user)
- ✅ Gestión de parcelas y geolocalización
- ✅ Seguimiento de cultivos y actividades
- ✅ Pronóstico meteorológico integrado
- ✅ Lotes de producción con trazabilidad QR
- ✅ Sistema de notificaciones push (FCM)
- ✅ Chat/comentarios en tiempo real
- ✅ Documentación Swagger completa
- ✅ API REST con Express.js
- ✅ Base de datos PostgreSQL
- ✅ Estructura modular MVC
- ✅ Middleware de CORS configurado
- ✅ Variables de entorno para configuración
- ✅ Manejo de errores centralizado
- Auth - Autenticación y registro
- Users - Gestión de usuarios y perfiles
- Plots - Administración de parcelas
- Weather - Datos climáticos
- Crop - Gestión de cultivos
- Activity - Actividades agrícolas
- Production - Lotes y trazabilidad
- Comment - Sistema de chat
- FCM - Notificaciones push
- Notifications - Gestión de notificaciones
- Runtime: Node.js
- Framework: Express.js 5.1.0
- Base de Datos: PostgreSQL
- Autenticación: JWT + Refresh Tokens + bcrypt
- Variables de Entorno: dotenv
- CORS: cors
- Documentación: Swagger/OpenAPI
- Notificaciones: Firebase Cloud Messaging
- Logs: Winston
- Migraciones: db-migrate
- Testing: Jest + Supertest
- Herramientas de Desarrollo: nodemon, standard
- Node.js (versión 20.10.0 o superior)
- PostgreSQL
- npm o yarn
-
Clonar el repositorio
git clone <url-del-repositorio> cd api-agrosig-backend
-
Instalar dependencias
npm install
-
Configurar variables de entorno
Crear un archivo
.enven la raíz del proyecto:# Configuración de la base de datos DB_HOST=localhost DB_PORT=5432 DB_NAME=agrosig_db DB_USER=your_username DB_PASSWORD=your_password # Configuración del servidor PORT=4000 NODE_ENV=development # Configuración JWT JWT_SECRET=your_jwt_secret_key JWT_REFRESH_SECRET=your_jwt_refresh_secret_key # Configuración Firebase (opcional) FCM_SERVICE_ACCOUNT_KEY=path/to/service-account-key.json
-
Inicializar la base de datos
npm run db:init npm run migrate:up
Modo desarrollo:
npm run devModo producción:
npm startEl servidor se ejecutará en http://localhost:4000 (o el puerto configurado en las variables de entorno).
Una vez iniciado el servidor, puedes acceder a la documentación interactiva de la API en:
- Local:
http://localhost:4000/api-docs
- Registro/Login → Obtener tokens de autenticación
- Gestión de Parcelas → Registrar ubicaciones de cultivo
- Configuración de Cultivos → Crear y gestionar cultivos
- Registro de Actividades → Registrar labores agrícolas
- Seguimiento de Producción → Crear lotes y generar QR
- Monitoreo → Consultar clima y notificaciones
Para ejecutar las pruebas:
# Ejecutar todas las pruebas
npm test
# Ejecutar pruebas en modo watch
npm run test:watchnpm start- Inicia servidor en producciónnpm run dev- Inicia servidor en desarrollo con nodemonnpm test- Ejecuta pruebas unitariasnpm run test:watch- Ejecuta pruebas en modo watchnpm run migrate:up- Ejecuta migraciones pendientesnpm run migrate:down- Revierte última migraciónnpm run migrate:create- Crea nueva migraciónnpm run migrate:reset- Resetea todas las migracionesnpm run lint:fix- Corrige estilo de código automáticamente
La API utiliza autenticación Bearer Token con refresh tokens. Para acceder a los endpoints protegidos:
curl -H "Authorization: Bearer <your_jwt_token>" \
-H "x-refresh-token: <your_refresh_token>" \
http://localhost:4000/api/endpoint- La API requiere autenticación para la mayoría de endpoints
- Algunos endpoints requieren roles específicos (admin/user)
- El servidor está configurado para escuchar en
0.0.0.0para compatibilidad con contenedores - Las imágenes de perfil se almacenan en
/uploads/profile/
- David Hernández - @Dave0097-hdz
- ISC License