Saltar al contenido principal

🎮 Ejercicios Spring Boot Kotlin

Serie de retos prácticos gamificados para dominar Spring Boot con arquitectura hexagonal y TDD.

📋 Contexto​

Aprender frameworks requiere práctica deliberada. Estos ejercicios gamifican el aprendizaje mediante una narrativa de viajes y retos.

🎯 Objetivo​

Desarrollar habilidades prácticas en:

  • Validación de reglas de negocio complejas
  • Caché con Redis
  • Arquitectura basada en eventos
  • Búsqueda dinámica
  • Rate limiting
  • Pruebas de carga

📦 Alcance​

Incluye: 8 módulos de ejercicios progresivos Prerrequisitos: Proyecto Spring Boot base configurado

🏛️ Ejercicios​

1. Validación Avanzada​

Narrativa: El viajero debe asegurar que sus reservas cumplan reglas estrictas.

EjercicioDescripciónDificultad
1.1Validar fecha regreso > fecha salida, máximo 30 días⭐
1.2Validar número de pasajeros ≤ capacidad del transporte⭐⭐
1.3Validar destino no esté en lista negra⭐⭐

Pistas:

  • Usar validación custom con @Constraint
  • Tests unitarios para cada regla
  • Excepciones de dominio específicas

2. Caché Inteligente (Redis)​

Narrativa: La app debe responder rápido para consultas frecuentes.

EjercicioDescripciónDificultad
2.1Cachear lista de destinos populares (TTL 10 min)⭐
2.2Cachear detalles de viaje por ID con invalidación⭐⭐
2.3Caché condicional: solo viajes con >5 reservas⭐⭐⭐

Stack: Redis + Spring Cache + Testcontainers

3. Arquitectura Basada en Eventos​

Narrativa: Notificaciones en tiempo real sobre cambios en viajes.

EjercicioDescripciónDificultad
3.1Publicar evento al crear/actualizar reserva⭐
3.2Listener WebSocket para notificaciones push⭐⭐
3.3Mecanismo de reintentos con backoff exponencial⭐⭐⭐

Patrones: Domain Events, Outbox Pattern

4. Búsqueda Dinámica​

Narrativa: El viajero busca viajes por múltiples criterios.

EjercicioDescripciónDificultad
4.1Filtros básicos: fecha, destino (Specification API)⭐
4.2Filtros avanzados: rango precio, tipo experiencia⭐⭐
4.3Paginación y ordenamiento dinámico⭐⭐

API: Spring Data JPA Specifications

5. Rate Limiting​

Narrativa: Proteger la API de abusos.

EjercicioDescripciónDificultad
5.1Rate limiting por IP (Bucket4j)⭐
5.2Cuotas diferenciadas por rol de usuario⭐⭐
5.3Respuesta personalizada con tiempo de espera⭐⭐

6. Pruebas de Carga​

Narrativa: Verificar que la app soporta temporada alta.

EjercicioDescripciónDificultad
6.1Script Gatling/JMeter para endpoint de búsqueda⭐⭐
6.2Prueba de creación masiva de reservas⭐⭐
6.3Integrar pruebas de carga en CI⭐⭐⭐

7. Internacionalización (i18n)​

Narrativa: La app disponible en múltiples idiomas.

EjercicioDescripciónDificultad
7.1Mensajes en español e inglés⭐
7.2Detectar locale desde header HTTP⭐
7.3Formato de fechas y monedas por locale⭐⭐

8. Multi-tenant SaaS​

Narrativa: Ofrecer la app a múltiples agencias con datos aislados.

EjercicioDescripciónDificultad
8.1Esquema multi-tenant por schema en DB⭐⭐⭐
8.2Datasource dinámico por tenant⭐⭐⭐
8.3Tests de aislamiento de datos⭐⭐⭐

🎯 Entregables por Ejercicio​

src/
├── domain/ # Modelos y reglas de negocio
├── application/ # Casos de uso (services)
├── infrastructure/ # Repositorios, caché, eventos
├── api/ # Controllers
└── test/
├── unit/ # Tests de dominio
├── integration/ # Tests con Testcontainers
└── load/ # Scripts Gatling

✅ Criterios de Aceptación​

  • Tests unitarios >80% cobertura
  • Tests de integración con Testcontainers
  • Documentación del diseño (ADR)
  • Código formateado (ktlint)
  • Pipeline CI pasa

📚 Referencias​