Este backend implementa una API REST en Java para gestionar eventos y fuentes. Los datos se cargan desde archivos CSV sin utilizar bases de datos, y la carga se realiza de forma paralela para optimizar el rendimiento.
- Java 8 o superior
- Maven 3.6 o superior
backend/
├── src/
│ ├── main/
│ │ ├── java/com/ariadna/backend/
│ │ │ ├── BackendServer.java # Servidor principal con endpoints REST
│ │ │ ├── DataLoader.java # Carga de datos desde archivos CSV
│ │ │ ├── model/
│ │ │ │ ├── Evento.java # Modelo de datos para eventos
│ │ │ │ └── Fuente.java # Modelo de datos para fuentes
│ │ │ └── service/
│ │ │ └── DataLoaderService.java
│ │ └── resources/
│ │ ├── fuentes.csv # Archivo de fuentes
│ │ └── eventos_1.csv a eventos_6.csv # Archivos de eventos
│ └── test/
│ └── java/com/ariadna/backend/
│ ├── BackendServerTest.java # Tests para endpoints
│ └── DataLoaderTest.java # Tests para carga de datos
├── pom.xml # Configuración de Maven
└── README.md # Este archivo
cd backend
mvn clean compilemvn testOpción 1: Usando Maven exec plugin
mvn exec:java -Dexec.mainClass="com.ariadna.backend.BackendServer"Opción 2: Crear JAR ejecutable
mvn clean package
java -jar target/backend-1.0.0.jarEl servidor se iniciará en http://localhost:4567
GET /api/fuentes- Obtener todas las fuentesGET /api/fuentes/:id- Obtener una fuente específica por ID
GET /api/eventos- Obtener todos los eventosGET /api/eventos/:id- Obtener un evento específico por IDGET /api/eventos/fuente/:fuenteId- Filtrar eventos por fuenteGET /api/eventos/fecha?desde=YYYY-MM-DDTHH:mm:ssZ&hasta=YYYY-MM-DDTHH:mm:ssZ- Filtrar eventos por rango de fechasGET /api/eventos/pagina?pagina=1&tamano=10- Obtener eventos con paginación
GET /api/stats- Obtener estadísticas generales (total fuentes, eventos, promedio de valores)
id,nombre,latitud,longitud
1,Fuente Norte,40.4168,-3.7038
2,Fuente Sur,37.3891,-5.9845
...id,fuente_id,timestamptz,valor,latitud,longitud
1,1,2024-06-01T10:00:00Z,23.5,40.4170,-3.7035
2,2,2024-06-01T10:05:00Z,19.8,37.3895,-5.9840
...- Carga paralela: Los archivos de eventos se cargan en paralelo usando
ExecutorService - Sin base de datos: Todos los datos se mantienen en memoria
- CORS habilitado: Permite peticiones desde el frontend
- JSON responses: Todas las respuestas están en formato JSON
- Tests unitarios: Cobertura de tests para carga de datos y lógica de filtrado
- Spark Java: Framework web ligero para crear la API REST
- Gson: Para serialización/deserialización JSON
- JUnit: Para tests unitarios
curl http://localhost:4567/api/fuentescurl http://localhost:4567/api/eventos/fuente/1curl "http://localhost:4567/api/eventos/fecha?desde=2024-06-01T10:00:00Z&hasta=2024-06-01T11:00:00Z"curl "http://localhost:4567/api/eventos/pagina?pagina=1&tamano=5"