Este repositorio contiene una arquitectura de microservicios implementada en Java 17 para la gestión de puntos de venta (PDV), costos y acreditaciones. La aplicación utiliza una base de datos en memoria interna H2 para los puntos de venta y costos, mientras que el servicio de acreditaciones emplea una base de datos MySQL.
Java 17: Lenguaje principal de desarrollo.
Spring Boot: Framework para la creación de microservicios.
Spring Cloud Gateway: Para la gestión de enrutamiento y balanceo de carga entre microservicios.
Eureka Server: Para el descubrimiento de servicios.
Bases de Datos:
H2 (en memoria) para los servicios de costos y puntos de venta.
MySQL para el servicio de acreditaciones.
JUnit y Mockito: Para la realización de pruebas unitarias.
Postman: Para la validación y pruebas de los endpoints expuestos.
Caffeine: Para la implementación de cache en los servicios de Puntos de Venta y Costos, mejorando la eficiencia en el acceso a datos frecuentemente solicitados.
Arquitectura del Proyecto
La aplicación se estructura en varios microservicios interconectados a través del API Gateway. Cada microservicio es responsable de una funcionalidad específica:
Microservicio de Puntos de Venta (PDV):
-
Gestión de puntos de venta.
-
Cálculo de costos.
-
Base de datos H2 para almacenamiento en memoria.
Microservicio de Acreditaciones:
-
Gestión de acreditaciones.
-
Base de datos MySQL para almacenamiento persistente.
Gateway:
-
Configuración para enrutamiento dinámico entre servicios usando Spring Cloud Gateway.
-
Descubrimiento de servicios habilitado mediante Eureka.
Cache - Caffeine
Se ha implementado Caffeine como sistema de caching en el servicio de Challenge-PDV para mejorar el rendimiento y la eficiencia en el cálculo y almacenamiento de los datos de puntos de venta y costos. El cache se ha configurado para almacenar los resultados de los puntos de venta y los costos durante un período de tiempo específico, lo que reduce la carga en la base de datos y mejora el tiempo de respuesta para solicitudes frecuentes.
Configuración del Gateway
A continuación se presenta el archivo application.properties configurado para el API Gateway:
spring.application.name=api-gateway
server.port=8082
eureka.client.service-url.defaultZone=http://discovery-server:8010/eureka
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
Gestión de Puntos de Venta y Costos:
-
CRUD de puntos de venta.
-
Cálculo de costos y reportes.
-
Excepciones personalizadas para manejo de errores.
Gestión de Acreditaciones:
-
Registro y consulta de acreditaciones.
-
Integración con MySQL para almacenamiento.
Gateway y Descubrimiento de Servicios:
-
Enrutamiento dinámico.
-
Integración con Eureka para el descubrimiento de servicios.
Pruebas Unitarias
- Las pruebas unitarias se han implementado utilizando JUnit y Mockito.
Swagger
- Accede a la documentacion mediante sus respectivos archivos yml
Clona el repositorio:
git clone https://github.com/DeniseMDB/java-challenge
Setea la variable de entorno:
- Importante! Dentro de la carpeta encontraras un archivo .env.
- Para editarlo: click izquierdo sobre '.env', seleccionar Editar/Abrir con Bloc de Notas
- Ingresar tu ip address para que corra correctamente. Si no sabes cual es podes ingresar a: https://www.cualesmiip.com/ y podras copiar su valor.
IP_ADDR: "ingresa tu ip address"
Levanta los servicios:
Mediante el uso de docker podras buildear cada imagen y correr sus contenedores.
docker-compose up -d
Accede al Api Gateway en el puerto 8082, utiliza Postman para probar los endpoints.
- Por ejemplo para testear el servicio de Challenge-PVD creando una solicitud
GETa la ruta:
localhost:8082/challenge-pdv/v1/costos
- O el servicio de Acreditaciones enviando un
POSTa la ruta:
localhost:8082/acreditaciones/v1/acreditacion?cost=50.0&id=1




