-
Notifications
You must be signed in to change notification settings - Fork 0
3. Roadmap del curso
El curso sigue la historia de Kai construyendo el Hotel Pokémon. Cada gimnasio corresponde a un dominio técnico que todo ingeniero backend de nivel medio-senior debe dominar.
Líder: Brock | Insignia: Boulder Badge
Antes de construir cualquier otra cosa, el Hotel Pokémon necesita guardar datos correctamente. Este gimnasio obliga a pensar el modelo de dominio antes de escribir controllers — el orden correcto de razonamiento.
- Mapeo de entidades JPA con Kotlin:
@Entity,@Column,@GeneratedValue - Relaciones reales:
@OneToMany,@ManyToOne,@ManyToManycon tabla intermedia -
FetchType.LAZYcomo regla,EAGERcomo excepción justificada - Migraciones con Flyway: versionado de esquemas, seed data (
V001__init.sql) - Spring Data JPA: queries derivadas, JPQL, queries nativas
- Optimistic locking con
@Versionpara concurrencia en reservas simultáneas
Desafío clave: detectar solapamiento de fechas en reservas con una query SQL que verifica si dos intervalos se intersectan.
Líder: Lt. Surge | Insignia: Thunder Badge
Team Rocket ha intentado entrar al sistema. Es hora de blindar el Hotel Pokémon.
- Spring Security con Kotlin DSL
- Autenticación stateless con JWT: estructura del token, qué va en el payload, qué nunca debe ir ahí
- Access tokens (24h) + Refresh tokens (7 días con rotación)
- Autorización basada en roles (
TRAINER,GYM_LEADER,PROFESOR_OAK) con@PreAuthorize - Seguridad a nivel de método:
@reservationSecurity.isOwner(#id, principal.id) - Protección contra ataques: SQL injection, CSRF en APIs stateless, CORS
Líder: Misty | Insignia: Cascade Badge
Un sistema que acepta datos inválidos miente sobre su propio estado.
- Bean Validation:
@NotBlank,@Email,@Min,@Future, constraints personalizados con@Constraint -
@Validen controllers y cascada en objetos anidados - Manejo estructurado de errores:
@RestControllerAdvice,@ExceptionHandler, formato RFC 7807 - Excepciones de dominio con semántica clara:
RoomNotAvailableException,DuplicateEmailException - Códigos HTTP correctos: diferencia entre 400, 404, 409 y 422
-
@Transactional: cuándo es necesario y por quéreadOnly = trueimporta
Líder: Erika | Insignia: Rainbow Badge
El código sin tests no es código terminado, es deuda técnica disfrazada de progreso.
- Unit tests: dominio puro con MockK, sin Spring context, en <1ms por test
-
Tests de controlador:
@WebMvcTest+MockMvc, solo carga la capa web -
Tests de repositorio:
@DataJpaTestcon H2, verifica queries personalizadas -
Tests de integración:
BaseIntegrationTest+ Testcontainers con PostgreSQL real -
Tests E2E:
@SpringBootTestconTestRestTemplate - Cobertura con JaCoCo: mínimo 85% como señal de alerta, no como número sagrado
- TDD: primero el test, luego la implementación
- Pirámide de tests: la mayoría deben ser unit tests
Insight clave: Testcontainers resuelve el problema clásico de "pasan en H2 pero fallan en Postgres".
Líder: Blaine | Insignia: Volcano Badge
Un sistema que no puede ser observado no puede ser operado.
- Logging estructurado: logs como JSON con campos buscables (
userId,reservationId,traceId) - Niveles de log: DEBUG en desarrollo, INFO para eventos de negocio, WARN para situaciones recuperables, ERROR cuando algo realmente falla
- Métricas con Micrometer + Prometheus: contadores, gauges, histogramas
- Spring Actuator: endpoints de health, info, metrics
- Distributed Tracing con OpenTelemetry
- Sentry para error tracking: captura de excepciones no manejadas con stack trace completo
Líder: Giovanni | Insignia: Earth Badge
El código que no está en producción no entrega valor.
- Docker: contenedorizar la aplicación, Docker Compose para desarrollo local
- GitHub Actions: pipeline CI/CD completo (build, test, análisis estático, deploy)
- Análisis estático con Detekt: code smells, reglas de calidad
- KTLint: formateo consistente del código Kotlin
- Conventional Commits:
feat:genera minor,fix:genera patch (con semantic-release) - Estrategia de branching:
feature/,fix/,chore/, protección de main
Después de las seis insignias, Kai construye desde cero el módulo de reviews: entrenadores que completaron su estancia pueden dejar una reseña de 1-5 estrellas. Solo usuarios autenticados con estancia confirmada pueden crear reseñas.
Este módulo cubre todo el stack:
- Entidad JPA con relación a
UseryReservation - Validación de negocio (solo post-checkout)
- Endpoints REST con autorización por rol
- Unit tests + integration tests + E2E
- Logs y métricas
- Pipeline CI que lo valida automáticamente
- Kotlin coroutines para procesamiento asíncrono
- Spring Application Events o Kafka para eventos de dominio
- WebSockets para notificaciones en tiempo real
- OAuth2 para login con Google/GitHub
- Internacionalización: mensajes de error en el idioma del cliente
- JMeter para pruebas de carga (1,000 reservas simultáneas)
- Despliegue en AWS Elastic Beanstalk
© 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.