Ejemplo completo de implementación de Arquitectura Hexagonal (Ports & Adapters) usando Spring Boot.
- Java 21+
- Maven 3.6+
# Compilar
mvn clean compile
# Ejecutar
mvn spring-boot:run
# Ejecutar tests
mvn testcurl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{"email":"nuevo@example.com","name":"Usuario Nuevo"}'curl http://localhost:8080/api/userscurl http://localhost:8080/api/users/1curl -X PATCH http://localhost:8080/api/users/1/deactivatecurl -X PATCH http://localhost:8080/api/users/1/activate- Dominio: Entidades, excepciones y lógica de negocio
- Puertos: Interfaces de entrada y salida
- Servicios de Aplicación: Orquestación de casos de uso
- Adaptadores de Entrada: REST Controllers
- Adaptadores de Salida: JPA Repository, Email Service
- H2 en memoria
- Consola disponible en: http://localhost:8080/h2-console
- Datos de prueba incluidos
- Inversión de dependencias
- Separación de responsabilidades
- Testabilidad
- Flexibilidad de adaptadores
- Dominio (Domain) - Núcleo
- Entidades: User - Modelo de dominio inmutable
- Excepciones: UserNotFoundException, InvalidUserDataException
- Lógica de negocio: Métodos como activate(), deactivate(), isValidEmail()
- Puertos (Ports) - Interfaces
- Puertos de entrada: CreateUserUseCase, GetUserUseCase, UpdateUserUseCase
- Puertos de salida: UserRepository, NotificationService
- Servicios de Aplicación
- UserService: Implementa todos los casos de uso y orquesta la lógica de negocio
- Adaptadores de Entrada (Inbound)
- REST Controller: UserController para API REST
- DTOs: CreateUserRequest, UserResponse
- Validación: Con anotaciones de Bean Validation
- Manejo de errores: GlobalExceptionHandler
- Adaptadores de Salida (Outbound)
- Persistencia: UserRepositoryAdapter con JPA/H2
- Notificaciones: EmailNotificationAdapter (simulado con logs)
🚀 Funcionalidades Implementadas
- Crear usuarios - POST /api/users
- Obtener usuario por ID - GET /api/users/{id}
- Listar todos los usuarios - GET /api/users
- Desactivar usuario - PATCH /api/users/{id}/deactivate
- Activar usuario - PATCH /api/users/{id}/activate
- Prompt: "Genérame un proyecto sencillo de Java en Spring Boot que refleje un ejemplo de arquitectura hexagonal."