Este proyecto implementa una API REST usando:
- Javalin: Framework web ligero
- Google Guice: Inyección de dependencias
- RxJava: Programación reactiva y asíncrona
- Virtual Threads: Para mejor rendimiento
- Mockito & JUnit: Testing completo
Controller (Javalin) → Service (RxJava) → Client (RxJava) → External API
- UsersController: Maneja requests HTTP y usa RxJava para operaciones asíncronas
- UsersService: Lógica de negocio con transformación de datos usando RxJava
- UsersClient: Simula llamadas a API externa con RxJava
- Guice: Inyecta todas las dependencias automáticamente
- RxJavalin: Wrapper transparente que aplica RxHttpHandler.auto automáticamente
GET /users/{id}
- Obtener usuario por IDGET /users/username/{username}
- Obtener usuario por username
mvn compile exec:java -Dexec.mainClass="org.iskaypet.Application"
# Compilar
javac -cp "target/classes:$(find ~/.m2/repository -name "*.jar" | tr '\n' ':')" src/main/java/org/iskaypet/*.java src/main/java/org/iskaypet/*/*.java
# Ejecutar
java -cp "target/classes:$(find ~/.m2/repository -name "*.jar" | tr '\n' ':')" org.iskaypet.Application
Ejecutar directamente la clase Application.java
mvn test
UsersClientImplTest
: Tests del cliente que simula llamadas a API externaUsersServiceImplTest
: Tests del servicio con mocks del clienteUsersControllerTest
: Tests del controller con mocks del servicioRxHttpHandlerTest
: Tests del handler HTTP genéricoRxJavalinTest
: Tests del wrapper de Javalin
UserFlowIntegrationTest
: Tests de flujo completo con Guice
- ✅ Controllers: Tests con mocks de servicios
- ✅ Services: Tests con mocks de clients
- ✅ Clients: Tests de implementación real
- ✅ Utils: Tests de RxHttpHandler y RxJavalin
- ✅ Integration: Tests de flujo completo con DI
- ✅ Error Handling: Tests de manejo de errores
- ✅ RxJava: Tests de Observables y operadores
- ✅ Virtual Threads: Mejor rendimiento para operaciones I/O
- ✅ RxJava: Programación reactiva y asíncrona
- ✅ Guice: Inyección de dependencias
- ✅ Javalin: Framework web moderno y ligero
- ✅ Error Handling: Manejo robusto de errores con RxJava
- ✅ Testing: Cobertura completa con Mockito y JUnit
- ✅ RxJavalin: Transparencia automática para endpoints Rx
# Obtener usuario por ID
curl http://localhost:8080/users/1
# Obtener usuario por username
curl http://localhost:8080/users/username/johndoe
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"username": "johndoe"
}
src/
├── main/java/org/iskaypet/
│ ├── clients/ # Clientes para APIs externas
│ ├── controllers/ # Controladores HTTP
│ ├── dto/ # Data Transfer Objects
│ ├── services/ # Lógica de negocio
│ ├── util/ # Utilidades (RxJavalin, RxHttpHandler)
│ └── config/ # Configuración de Guice
└── test/java/org/iskaypet/
├── clients/ # Tests de clients
├── controllers/ # Tests de controllers
├── services/ # Tests de services
├── util/ # Tests de utilidades
└── integration/ # Tests de integración