-
Notifications
You must be signed in to change notification settings - Fork 0
8. Lista de ejercicios propuestos
El curso gira en torno a una aplicación que gestiona viajes y experiencias turísticas, donde el usuario es un viajero que va descubriendo funcionalidades para mejorar su experiencia y la gestión de sus viajes. Cada ejercicio será un "reto" o "misión" que el viajero debe completar para avanzar en su aventura.
Estos ejercicios van más allá del temario base y están diseñados para que pienses como un desarrollador senior, resuelvas problemas del mundo real y refuerces buenas prácticas. Cada uno incluirá en el futuro un objetivo claro, recomendaciones técnicas, profundizar para ir más lejos, se explicará la conexión con el negocio.
- Validación Avanzada: Reglas de Negocio complejas.
- Caché Inteligente: Integrar Redis de forma estratégica.
- Arquitectura Basada en Eventos: Notificaciones en Tiempo Real.
- Búsqueda Dinámica con Filtros Avanzados.
- Control de Rate Limiting para Proteger la API.
- Pruebas de Carga con Escenarios Reales.
- Internacionalización (i18n) para Clientes Globales.
- Recomendaciones Globales para Mejorar el Código y el Aprendizaje.
- Convierte tu API en una Plataforma SaaS, usa multi-tenant.
- Importación y exportación avanzada de datos desde CSV o Excel a tu aplicación.
¡Este es el nivel que separa a los juniors de los senior developers!
Cada ejercicio no solo se enfocará en mejorar tu código, sino que te prepara para tomar decisiones de arquitectura con impacto en el negocio.
Narrativa: El viajero debe asegurarse que sus reservas cumplan reglas estrictas para evitar problemas en el viaje.
Ejercicio 1: Validar que la fecha de regreso sea posterior a la fecha de salida y que el viaje no exceda 30 días.
- Implementar validaciones en el dominio para estas reglas.
- Crear tests unitarios que validen estas reglas.
- Simular un caso donde se intente reservar un viaje inválido y lanzar excepción.
Ejercicio 2: Validar que el número de pasajeros no exceda la capacidad máxima del transporte seleccionado.
- Añadir lógica para validar capacidad máxima.
- Tests para casos límite y excepciones.
- Implementar una lista negra configurable.
- Validar que no se pueda reservar a esos destinos.
- Tests para validar comportamiento.
Narrativa: El viajero quiere que la app responda rápido, especialmente al consultar destinos populares y detalles de viajes.
- Implementar un adaptador de caché Redis.
- Cachear la consulta de destinos populares por 10 minutos.
- Tests de integración con Redis (usando Testcontainers).
Ejercicio 2: Cachear detalles de un viaje específico para evitar consultas repetidas a la base de datos.
- Cachear por viajeId con TTL configurable.
- Invalidar caché al actualizar el viaje.
- Tests para validar caché y actualización.
- Añadir lógica para decidir cuándo cachear.
- Tests para validar comportamiento condicional.
Narrativa: El viajero recibe notificaciones en tiempo real sobre cambios en su viaje o alertas importantes.
- Definir evento de dominio.
- Implementar publisher usando Spring Events o Kafka (según alcance).
- Tests unitarios para publicación.
- Configurar WebSocket en Spring Boot.
- Listener que envíe notificaciones en tiempo real.
- Tests de integración con WebSocket.
- Implementar mecanismo de reintentos.
- Tests para simular fallos y recuperación.
Narrativa: El viajero quiere buscar viajes filtrando por fechas, destinos, precio y tipo de experiencia.
- Usar Specification o Criteria API para consultas dinámicas.
- Tests de integración para filtros.
- Extender lógica de filtros.
- Tests para combinaciones de filtros.
- Añadir paginación y ordenamiento configurable.
- Tests para validar paginación y orden.
Narrativa: Para evitar abusos, la app limita la cantidad de solicitudes que un usuario puede hacer.
- Configurar filtro o interceptor.
- Tests para validar límite.
- Configurar cuotas diferenciadas.
- Tests para roles y límites.
- Respuesta JSON con mensaje y tiempo de espera.
- Tests para validar respuesta.
Narrativa: El viajero quiere asegurarse que la app soporta picos de usuarios en temporada alta.
- Simular múltiples usuarios concurrentes.
- Analizar resultados.
- Simular creación concurrente.
- Medir tiempos y errores.
- Configurar ejecución automática.
- Reportes y alertas.
Narrativa: El viajero puede usar la app en varios idiomas según su ubicación.
- Usar archivos messages.properties.
- Tests para validar mensajes según locale.
- Configurar interceptor o filtro.
- Tests de integración.
- Usar clases de Java para formateo.
- Tests para formatos.
Narrativa: El viajero aprende buenas prácticas para mantener su código limpio y escalable.
- Identificar responsabilidades.
- Reorganizar paquetes y clases.
- Tests para validar refactor.
- Usar @Valid y @ExceptionHandler.
- Tests para validaciones y errores.
- Añadir configuración Gradle.
- Ejecutar análisis y corregir errores.
Narrativa: El viajero ahora ofrece su app a agencias de viajes, cada una con sus datos aislados.
- Configurar datasource dinámico.
- Tests para aislamiento de datos.
- Configurar Spring Security con tenant context.
- Tests para acceso restringido.
- Usar Flyway o Liquibase.
- Tests para migraciones.
Narrativa: El viajero puede importar listas de destinos o exportar reportes para análisis.
- Usar Apache Commons CSV o similar.
- Tests para importación y errores.
- Usar Apache POI.
- Tests para exportación.
- Soportar diferentes formatos.
- Tests para casos complejos.
Cada tema tiene 3 ejercicios que combinan dominio, aplicación, infraestructura y pruebas, siempre con enfoque en buenas prácticas, arquitectura hexagonal y TDD. La narrativa del viaje se usa para gamificar y contextualizar cada reto, haciendo el aprendizaje más ameno y práctico.
© 2025 Spring Boot Course - API REST real
Desarrollado por lgzarturo
Licencia Creative Commons Attribution 4.0 International (CC BY 4.0) | Términos de Uso | Política de Privacidad
Recursos adicionales:
¿Tienes sugerencias o quieres reportar un error?
- Inicio
- Calendario de liberaciones
- Arquitectura
- Guía de Desarrollo
- Roadmap del Curso
- Testing y Calidad
- Seguridad y Flujo
- Gamificación
- Usa TDD para asegurar calidad.
- Mantén las capas desacopladas.
- Documenta tus APIs con Swagger.
- Aplica seguridad con JWT y roles.