Skip to content

sti-chile/distance-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API de Rutas Optimas

Descripción

API REST desarrollada con Spring Boot para calcular rutas óptimas entre diferentes ubicaciones utilizando el algoritmo de Dijkstra. La aplicación está optimizada para manejar grandes volúmenes de datos (hasta 10,000 rutas) manteniendo un rendimiento eficiente.

Características Técnicas

  • ⚡ Optimizado para procesamiento de hasta 10,000 rutas
  • 🔄 Implementación eficiente del algoritmo de Dijkstra
  • 🗺️ Carga de mapas mediante archivos CSV
  • 📊 Estructuras de datos optimizadas (ConcurrentHashMap, PriorityQueue)
  • ✅ Cobertura completa de pruebas unitarias
  • 🐳 Contenedorización con Docker

Requisitos Técnicos

  • Java 21+
  • Spring Boot
  • Docker
  • Maven

Instalación

Usando Maven

# Compilar el proyecto
mvn clean install

# Ejecutar la aplicación
java -jar target/distance-api.jar

Usando Docker

# Construir la imagen
docker build -t distance-api .

# Ejecutar el contenedor
docker run -p 9091:9091 distance-api

Estructura de Datos

  • Grafo: Implementado con ConcurrentHashMap para operaciones thread-safe
  • Cola de Prioridad: Utilizada en Dijkstra para optimizar la selección de nodos
  • Complejidad Temporal:
    • Carga de rutas: O(n)
    • Búsqueda de ruta: O((V + E) log V) donde V=vértices, E=aristas

Endpoints

Cargar Mapa

POST /api/v1/mapa/cargar
Content-Type: multipart/form-data
  • Soporta archivos CSV de hasta 10,000 filas
  • Validación de formato y datos
  • Respuesta rápida gracias a estructuras optimizadas

Obtener Ruta Óptima

GET /api/v1/ruta/camino?origen={origen}&destino={destino}
  • Implementación eficiente del algoritmo de Dijkstra
  • Manejo de errores robusto
  • Respuestas JSON optimizadas

Docker

FROM openjdk:21-jdk-slim
WORKDIR /app
COPY target/distance-api.jar app.jar
EXPOSE 9091
ENTRYPOINT ["java","-jar","app.jar"]

Pruebas de Rendimiento

  • Pruebas unitarias extensivas
  • Cobertura de casos límite
  • Pruebas de carga para verificar el rendimiento con 10,000 rutas

Documentación API

La interfaz Swagger UI está disponible automáticamente al levantar la aplicación:

🔗 http://localhost:9091/swagger-ui

Puedes probar todos los endpoints directamente desde la interfaz web.

Swagger UI Screenshot

Archivos CSV de Prueba

Se incluyen archivos CSV de ejemplo en la carpeta:

📁 src/docs/

├──rutas_10000.csv # Mapa grande con 10.000 filas
├──rutas_vacia.csv # Mapa simple para tests

Consideraciones de Rendimiento

  1. Estructuras de Datos Eficientes:

    • ConcurrentHashMap para el grafo principal
    • PriorityQueue para el algoritmo de Dijkstra
    • ArrayList para listas de adyacencia
  2. Optimizaciones:

    • Validación temprana de datos
    • Manejo eficiente de memoria
    • Uso de estructuras thread-safe
  3. Escalabilidad:

    • Diseño preparado para alta concurrencia
    • Optimizado para grandes volúmenes de datos
    • Contenedorización para fácil escalado

Métricas y Monitoreo

  • Puerto de la aplicación: 9091
  • Endpoints de salud y métricas
  • Logs estructurados

Licencia

MIT

Autor

Javier Ferreira – @javaferso

Contribuir

Ver CONTRIBUTING.md para detalles.


Este proyecto cumple con todos los requisitos especificados:

  • ✅ Manejo eficiente de 10,000 filas
  • ✅ Implementado en Java 21+ con Spring Boot
  • ✅ Estructuras de datos optimizadas
  • ✅ Pruebas unitarias completas
  • ✅ Imagen Docker disponible

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors