IDSA es una API REST desarrollada con Spring Boot que actúa como puente central en el sistema para la identificación de síntomas de consumo de sustancias adictivas. La API recibe datos biométricos y fisiológicos desde dispositivos IoT (Raspberry Pi) a través del protocolo MQTT, gestiona el almacenamiento de información en PostgreSQL, coordina el procesamiento con modelos de predicción, y proporciona endpoints para que la aplicación web Angular pueda consultar resultados y reportes.
La API es responsable de:
- Recibir y procesar datos biométricos (imágenes faciales, temperatura, ritmo cardíaco, presión arterial) desde dispositivos IoT
- Gestionar la comunicación MQTT para recepción de datos en tiempo real
- Almacenar información en base de datos PostgreSQL
- Coordinar el análisis con modelos de predicción cuando se acumulan suficientes registros (mínimo 10)
- Proporcionar endpoints para consulta de historiales y reportes de análisis
- Gestionar la autenticación y autorización de usuarios del sistema
- Captura y Envío de Datos:
- Dispositivos IoT (Raspberry Pi) capturan imágenes y datos fisiológicos al ingreso del estudiante.
- Los datos se envían vía MQTT en formato JSON a la API.
- Recepción y Procesamiento:
- La API almacena los datos y, al acumular 10 registros, los envía al modelo de predicción para análisis.
- Predicción y Almacenamiento:
- El modelo retorna la probabilidad de consumo, métricas fisiológicas y dilatación pupilar.
- La API almacena los resultados y referencias a las imágenes.
- Visualización:
- El panel web (Angular) consulta la API para mostrar historiales y reportes a tutores y administradores.
- Autenticación y Autorización: Sistema JWT completo con refresh tokens
- Gestión de Usuarios: CRUD completo para estudiantes, tutores y roles
- Gestión Académica: Campus, generaciones, grados, grupos y especialidades
- Datos Biométricos: Procesamiento y reportes de datos biométricos
- Comunicación MQTT: Integración con protocolo MQTT para IoT
- Sistema de Correos: Envío de emails con plantillas Thymeleaf
- Almacenamiento de Archivos: Gestión de archivos con configuración flexible
- Validación de Datos: Validación robusta con Bean Validation
- Manejo de Excepciones: Sistema global de manejo de errores
- CORS Configurado: Soporte para aplicaciones frontend
- Documentación API: Documentación interactiva con Swagger/OpenAPI 3
La API cuenta con documentación generada con Swagger/OpenAPI 3 utilizando Springdoc OpenAPI. La documentación incluye todos los endpoints, modelos de datos y parámetros.
La interfaz de Swagger UI permite explorar y probar todos los endpoints de forma interactiva:
-
Desarrollo:
-
Producción: La documentación está deshabilitada en producción por seguridad.
- Java 21: Lenguaje de programación principal
- Spring Boot 3.4.3: Framework principal
- Spring Security: Autenticación y autorización
- Spring Data JPA: Acceso a datos
- Spring Integration MQTT: Comunicación MQTT
- Spring Mail: Envío de correos electrónicos
- Thymeleaf: Plantillas para emails
- Springdoc OpenAPI: Documentación API con Swagger
- PostgreSQL
- Maven: Gestión de dependencias y build
- MapStruct: Mapeo de objetos
- Lombok: Reducción de código boilerplate
- JWT: Tokens de autenticación
backend-idsa/
├── src/ # Código fuente de la aplicación
│ ├── main/
│ │ ├── java/com/api/idsa/
│ │ │ ├── IdsaApplication.java # Clase principal de Spring Boot
│ │ │ ├── common/ # Componentes comunes
│ │ │ │ ├── config/ # Configuraciones globales
│ │ │ │ ├── exception/ # Excepciones personalizadas
│ │ │ │ ├── response/ # Respuestas API estandarizadas
│ │ │ │ ├── util/ # Utilidades
│ │ │ │ └── validation/ # Validaciones personalizadas
│ │ │ ├── domain/ # Dominios de negocio
│ │ │ │ ├── academic/ # Gestión académica
│ │ │ │ │ ├── controller/ # Controladores REST
│ │ │ │ │ ├── dto/ # Objetos de transferencia
│ │ │ │ │ ├── mapper/ # Mapeadores MapStruct
│ │ │ │ │ ├── model/ # Entidades JPA
│ │ │ │ │ ├── repository/ # Repositorios de datos
│ │ │ │ │ └── service/ # Lógica de negocio
│ │ │ │ ├── biometric/ # Datos biométricos
│ │ │ │ └── personnel/ # Gestión de personal
│ │ │ ├── infrastructure/ # Infraestructura
│ │ │ │ ├── fileStorage/ # Almacenamiento de archivos
│ │ │ │ ├── mail/ # Servicio de correos
│ │ │ │ ├── model/ # Modelo de predicción
│ │ │ │ └── mqtt/ # Configuración MQTT
│ │ │ └── security/ # Seguridad y autenticación
│ │ │ ├── config/ # Configuración de seguridad
│ │ │ ├── controller/ # Controladores de auth
│ │ │ ├── dto/ # DTOs de autenticación
│ │ │ ├── enums/ # Enumeraciones
│ │ │ ├── filter/ # Filtros JWT
│ │ │ ├── provider/ # Proveedores de tokens
│ │ │ └── service/ # Servicios de auth
│ │ └── resources/
│ │ ├── application.properties # Configuración base común
│ │ ├── application-dev.properties # Configuración específica desarrollo
│ │ ├── application-prod.properties # Configuración específica producción
│ │ ├── db/ # Scripts de base de datos
│ │ │ └── schema.sql # Esquema de base de datos
│ │ ├── static/ # Archivos estáticos
│ │ └── templates/ # Plantillas Thymeleaf
│ │ └── mail/ # Plantillas de email
│ └── test/ # Pruebas unitarias
├── .docker/ # Configuraciones de Docker
│ ├── mosquitto/ # Configuración del broker MQTT
│ │ ├── Dockerfile # Imagen personalizada de Mosquitto
│ │ ├── entrypoint.sh # Script de inicialización MQTT
│ │ └── .env.example # Variables de entorno para MQTT
│ └── README.md # Documentación de Docker
├── .mvn/ # Configuración Maven Wrapper
├── .gitignore # Archivos ignorados por Git
├── .dockerignore # Archivos ignorados por Docker
├── .env.example # Variables de entorno de ejemplo
├── docker-compose.yml # Orquestación de servicios Docker
├── Dockerfile # Configuración de la imagen de la API
├── mvnw # Wrapper Maven
├── mvnw.cmd # Wrapper Maven (Windows)
├── pom.xml # Configuración Maven
└── README.md # Documentación del proyecto
- Java 21 o superior
- Maven 3.6+
- PostgreSQL 16+
- IDE compatible (IntelliJ IDEA, Eclipse, VS Code)
- Crear una base de datos PostgreSQL:
CREATE DATABASE idsa_db;
- Ejecutar el script de esquema ubicado en schema.sql para crear las tablas necesarias.
- Copiar el archivo
.env.example
a.env
:
cp .env.example .env
- Configurar las variables de entorno en el archivo
.env
según tus necesidades. Consulta el archivo .env.example para ver todas las variables disponibles y sus descripciones.
El proyecto utiliza una arquitectura de configuración modular con perfiles específicos que se establecen mediante la variable de entorno SPRING_PROFILES_ACTIVE
en el archivo .env
.
application.properties
: Configuración base común (se aplica a todos los perfiles)application-dev.properties
: Configuración específica para desarrolloapplication-prod.properties
: Configuración específica para producción
- Desarrollo (dev):
- Base de datos: PostgreSQL local
- DDL:
none
(no modifica esquema) - SQL: Visible en consola (
show-sql=true
) - Logging: Detallado (DEBUG)
- Configuración:
SPRING_PROFILES_ACTIVE=dev
en archivo.env
- Ejecución:
mvn spring-boot:run
- Producción (prod):
- Base de datos: PostgreSQL de producción
- DDL:
none
(no modifica esquema) - SQL: Oculto en consola (
show-sql=false
) - Logging: Optimizado (INFO/WARN)
- Seguridad: Configuraciones adicionales
- Configuración:
SPRING_PROFILES_ACTIVE=prod
en archivo.env
- Ejecución:
mvn spring-boot:run
- Sin Perfil (default):
- Base de datos: PostgreSQL
- DDL:
none
(no modifica esquema) - SQL: Oculto en consola
- Logging: Configuración base
- Configuración:
SPRING_PROFILES_ACTIVE=
(vacío) o sin definir en archivo.env
- Ejecución:
mvn spring-boot:run
El proyecto incluye configuración completa para Docker y Docker Compose, permitiendo un despliegue rápido y consistente en cualquier entorno.
- Clonar el repositorio:
git clone <repository-url>
cd backend-idsa
- Configurar variables de entorno:
cp .env.example .env
# Editar el archivo .env con tus configuraciones
Esta opción despliega toda la infraestructura necesaria: API, base de datos PostgreSQL y broker MQTT.
# Construir y ejecutar todos los servicios
docker-compose --env-file .env up -d
Servicios incluidos:
- API (idsa-api): Puerto 8080
- PostgreSQL (idsa-db): Puerto 5432
- MQTT Broker (idsa-mqtt): Puerto 1883
Si ya tienes PostgreSQL y MQTT configurados externamente, puedes ejecutar solo la API:
# Construir la imagen
docker build -t idsa-back .
# Ejecutar el contenedor
docker run -d -p 8080:8080 --name idsa-app-api --env-file .env idsa-back
La API está diseñada para ser consumida por el panel web (frontend-idsa), que permite a los usuarios finales consultar los resultados y reportes generados por el sistema.
IDSA - Sistema para la identificación de síntomas de consumo de sustancias adictivas