Skip to content

About

Ejemplo completo de implementación de Arquitectura Hexagonal (Ports & Adapters) usando Spring Boot.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

🏗️ Proyecto Spring Boot - Arquitectura Hexagonal

📋 Descripción

Ejemplo completo de implementación de Arquitectura Hexagonal (Ports & Adapters) usando Spring Boot.

🚀 Cómo ejecutar

Prerequisitos

  • Java 21+
  • Maven 3.6+

Pasos

# Compilar
mvn clean compile

# Ejecutar
mvn spring-boot:run

# Ejecutar tests
mvn test

🔧 Endpoints disponibles

Crear usuario

curl -X POST http://localhost:8080/api/users \
  -H "Content-Type: application/json" \
  -d '{"email":"nuevo@example.com","name":"Usuario Nuevo"}'

Obtener todos los usuarios

curl http://localhost:8080/api/users

Obtener usuario por ID

curl http://localhost:8080/api/users/1

Desactivar usuario

curl -X PATCH http://localhost:8080/api/users/1/deactivate

Activar usuario

curl -X PATCH http://localhost:8080/api/users/1/activate

🏛️ Arquitectura

Capas implementadas:

  • 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

Base de datos

🎯 Principios aplicados

  • Inversión de dependencias
  • Separación de responsabilidades
  • Testabilidad
  • Flexibilidad de adaptadores

🎯 Estructura de Arquitectura Hexagonal

  1. Dominio (Domain) - Núcleo
  • Entidades: User - Modelo de dominio inmutable
  • Excepciones: UserNotFoundException, InvalidUserDataException
  • Lógica de negocio: Métodos como activate(), deactivate(), isValidEmail()
  1. Puertos (Ports) - Interfaces
  • Puertos de entrada: CreateUserUseCase, GetUserUseCase, UpdateUserUseCase
  • Puertos de salida: UserRepository, NotificationService
  1. Servicios de Aplicación
  • UserService: Implementa todos los casos de uso y orquesta la lógica de negocio
  1. Adaptadores de Entrada (Inbound)
  • REST Controller: UserController para API REST
  • DTOs: CreateUserRequest, UserResponse
  • Validación: Con anotaciones de Bean Validation
  • Manejo de errores: GlobalExceptionHandler
  1. 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

🎯 Código Generadado con Claude

  • Prompt: "Genérame un proyecto sencillo de Java en Spring Boot que refleje un ejemplo de arquitectura hexagonal."

About

Ejemplo completo de implementación de Arquitectura Hexagonal (Ports & Adapters) usando Spring Boot.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages