Este proyecto es un microservicio para la gestión de órdenes de entrega, desarrollado con Spring Boot. La aplicación expone una API REST para crear, consultar y actualizar órdenes, utilizando una arquitectura moderna orientada a eventos y con caché de alto rendimiento.
- API REST Completa: Endpoints para operaciones CRUD sobre las órdenes.
- Persistencia en MongoDB: Almacenamiento de datos NoSQL flexible y escalable.
- Caché con Redis: Optimización de las consultas frecuentes para obtener órdenes por ID.
- Mensajería con Kafka: Publicación de eventos en un tópico cada vez que una orden cambia de estado.
- Documentación Interactiva: Documentación automática de la API con Springdoc OpenAPI (Swagger UI).
- Contenerizado: Toda la infraestructura (MongoDB, Redis, Kafka) se gestiona con Docker Compose para un despliegue local sencillo.
- Testing Robusto: Incluye tests unitarios (Mockito) y de integración (Testcontainers) para garantizar la calidad del código.
| Componente | Tecnología Utilizada |
|---|---|
| Lenguaje y Framework | Java 17, Spring Boot 3.2.0 |
| Base de Datos | MongoDB |
| Caché | Redis |
| Mensajería | Apache Kafka |
| Build Tool | Apache Maven |
| API Documentation | Springdoc OpenAPI 3 (Swagger UI) |
| Testing | JUnit 5, Mockito, Testcontainers |
| Infraestructura Local | Docker & Docker Compose |
Sigue estos pasos para levantar y ejecutar el proyecto en tu entorno local.
- Git
- JDK 17 o superior
- Apache Maven 3.8+
- Docker y Docker Compose
-
Clona el repositorio:
git clone https://github.com/IgorRC/order-service.git cd order-service -
Levanta la infraestructura con Docker: Este comando iniciará los contenedores de MongoDB, Redis , Kafka, Zookeper , Sonar Qube,DB_Sonar y la App en segundo plano.
docker-compose up -d
La aplicación dockerizada estará disponible en
http://localhost:8081.
- Ejecuta la aplicación Spring Boot:
Puedes hacerlo desde tu IDE (ejecutando la clase
OrderServiceApplication) o usando Maven en la terminal, reccuerda desactivar la App dentro de los contenedores :La aplicación estará disponible enmvn spring-boot:run
http://localhost:8081.
Una vez que la aplicación esté corriendo, puedes acceder a la documentación interactiva de la API en tu navegador:
➡️ http://localhost:8081/swagger-ui.html
Desde allí podrás ver todos los endpoints, sus modelos de datos y probarlos directamente.
POST /orders
Ejemplo de Request Body:
{
"customerId": "cliente-001",
"items": [
{ "sku": "SKU-A1", "quantity": 2, "price": 150.50 },
{ "sku": "SKU-B2", "quantity": 1, "price": 200.00 }
]
}GET /orders/{id}
GET /orders?status=NEW&customerId=cliente-001
PATCH /orders/{id}/statusEjemplo de Request Body:
{
"newStatus": "IN_PROGRESS"
}