├── .gitignore ├── README.md ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── img ├── hexagonal-arch-spring-naspredam.png ├── hexagonal-architecture.png └── user domain model.png ├── settings.gradle └── src ├── main ├── java │ └── com │ │ └── example │ │ └── service │ │ └── user │ │ ├── UserSpringBootApplication.java │ │ ├── adapter │ │ ├── entrypoint │ │ │ └── api │ │ │ │ ├── ChangeUserEndpointAdapter.java │ │ │ │ ├── FindUserEndpointAdapter.java │ │ │ │ ├── UserController.java │ │ │ │ ├── UserDtoMapper.java │ │ │ │ └── model │ │ │ │ ├── SaveUserBodyDto.java │ │ │ │ └── UserDto.java │ │ └── persistence │ │ │ ├── ReadUserAdapter.java │ │ │ ├── UserJpaMapper.java │ │ │ ├── UserRepository.java │ │ │ ├── WriteUserAdapter.java │ │ │ └── model │ │ │ └── UserData.java │ │ ├── application │ │ ├── port │ │ │ ├── entrypoint │ │ │ │ └── api │ │ │ │ │ ├── ChangeUserEndpointPort.java │ │ │ │ │ └── FindUserEndpointPort.java │ │ │ └── persistence │ │ │ │ ├── ReadUserPort.java │ │ │ │ └── WriteUserPort.java │ │ ├── service │ │ │ ├── ChangeExistingUserService.java │ │ │ ├── DeleteUsersByIdService.java │ │ │ ├── FindUserService.java │ │ │ └── SubmitNewUserService.java │ │ └── usecase │ │ │ ├── ChangeExistingUserUseCase.java │ │ │ ├── DeleteUsersByIdUseCase.java │ │ │ ├── FindAllUsersUseCase.java │ │ │ ├── FindUserByIdUseCase.java │ │ │ └── SubmitNewUserUseCase.java │ │ ├── domain │ │ ├── FullName.java │ │ ├── Phone.java │ │ ├── User.java │ │ ├── UserFunctions.java │ │ └── UserId.java │ │ └── infrastructure │ │ ├── annotations │ │ ├── Adapter.java │ │ └── Mapper.java │ │ └── validator │ │ └── ObjectValidator.java └── resources │ ├── application.yaml │ └── db │ └── changelog │ └── db.changelog-master.yaml └── test ├── java └── com │ └── example │ └── service │ └── user │ ├── adapter │ ├── entrypoint │ │ └── api │ │ │ ├── ChangeUserEndpointAdapterTest.java │ │ │ ├── FindUserEndpointAdapterTest.java │ │ │ ├── UserControllerIntegrationTest.java │ │ │ └── UserDtoMapperTest.java │ └── persistence │ │ ├── ReadUserAdapterTest.java │ │ ├── UserJpaMapperTest.java │ │ ├── UserRepositoryTest.java │ │ └── WriteUserAdapterTest.java │ ├── application │ └── service │ │ ├── ChangeExistingUserServiceTest.java │ │ ├── DeleteUsersByIdServiceTest.java │ │ ├── FindUserServiceTest.java │ │ └── SubmitNewUserServiceTest.java │ ├── architecture │ ├── DomainArchitectureTest.java │ └── LayersArchitectureTest.java │ ├── domain │ ├── PhoneTest.java │ └── UserFunctionsTest.java │ ├── infrastructure │ └── validator │ │ └── ObjectValidatorTest.java │ └── utils │ └── DataFaker.java └── resources └── application.yaml /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/.gitignore -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/README.md -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/gradle/wrapper/gradle-wrapper.properties -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/gradlew -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/gradlew.bat -------------------------------------------------------------------------------- /img/hexagonal-arch-spring-naspredam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/img/hexagonal-arch-spring-naspredam.png -------------------------------------------------------------------------------- /img/hexagonal-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/img/hexagonal-architecture.png -------------------------------------------------------------------------------- /img/user domain model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/img/user domain model.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'rest-spring-boot-hexagonal-arch-users' 2 | -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/UserSpringBootApplication.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/UserSpringBootApplication.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/entrypoint/api/ChangeUserEndpointAdapter.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/entrypoint/api/ChangeUserEndpointAdapter.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/entrypoint/api/FindUserEndpointAdapter.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/entrypoint/api/FindUserEndpointAdapter.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/entrypoint/api/UserController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/entrypoint/api/UserController.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/entrypoint/api/UserDtoMapper.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/entrypoint/api/UserDtoMapper.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/entrypoint/api/model/SaveUserBodyDto.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/entrypoint/api/model/SaveUserBodyDto.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/entrypoint/api/model/UserDto.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/entrypoint/api/model/UserDto.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/persistence/ReadUserAdapter.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/persistence/ReadUserAdapter.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/persistence/UserJpaMapper.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/persistence/UserJpaMapper.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/persistence/UserRepository.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/persistence/UserRepository.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/persistence/WriteUserAdapter.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/persistence/WriteUserAdapter.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/adapter/persistence/model/UserData.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/adapter/persistence/model/UserData.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/port/entrypoint/api/ChangeUserEndpointPort.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/port/entrypoint/api/ChangeUserEndpointPort.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/port/entrypoint/api/FindUserEndpointPort.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/port/entrypoint/api/FindUserEndpointPort.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/port/persistence/ReadUserPort.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/port/persistence/ReadUserPort.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/port/persistence/WriteUserPort.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/port/persistence/WriteUserPort.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/service/ChangeExistingUserService.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/service/ChangeExistingUserService.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/service/DeleteUsersByIdService.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/service/DeleteUsersByIdService.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/service/FindUserService.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/service/FindUserService.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/service/SubmitNewUserService.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/service/SubmitNewUserService.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/usecase/ChangeExistingUserUseCase.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/usecase/ChangeExistingUserUseCase.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/usecase/DeleteUsersByIdUseCase.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/usecase/DeleteUsersByIdUseCase.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/usecase/FindAllUsersUseCase.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/usecase/FindAllUsersUseCase.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/usecase/FindUserByIdUseCase.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/usecase/FindUserByIdUseCase.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/application/usecase/SubmitNewUserUseCase.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/application/usecase/SubmitNewUserUseCase.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/domain/FullName.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/domain/FullName.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/domain/Phone.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/domain/Phone.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/domain/User.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/domain/User.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/domain/UserFunctions.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/domain/UserFunctions.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/domain/UserId.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/domain/UserId.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/infrastructure/annotations/Adapter.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/infrastructure/annotations/Adapter.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/infrastructure/annotations/Mapper.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/infrastructure/annotations/Mapper.java -------------------------------------------------------------------------------- /src/main/java/com/example/service/user/infrastructure/validator/ObjectValidator.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/java/com/example/service/user/infrastructure/validator/ObjectValidator.java -------------------------------------------------------------------------------- /src/main/resources/application.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/resources/application.yaml -------------------------------------------------------------------------------- /src/main/resources/db/changelog/db.changelog-master.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/main/resources/db/changelog/db.changelog-master.yaml -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/adapter/entrypoint/api/ChangeUserEndpointAdapterTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/adapter/entrypoint/api/ChangeUserEndpointAdapterTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/adapter/entrypoint/api/FindUserEndpointAdapterTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/adapter/entrypoint/api/FindUserEndpointAdapterTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/adapter/entrypoint/api/UserControllerIntegrationTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/adapter/entrypoint/api/UserControllerIntegrationTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/adapter/entrypoint/api/UserDtoMapperTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/adapter/entrypoint/api/UserDtoMapperTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/adapter/persistence/ReadUserAdapterTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/adapter/persistence/ReadUserAdapterTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/adapter/persistence/UserJpaMapperTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/adapter/persistence/UserJpaMapperTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/adapter/persistence/UserRepositoryTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/adapter/persistence/UserRepositoryTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/adapter/persistence/WriteUserAdapterTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/adapter/persistence/WriteUserAdapterTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/application/service/ChangeExistingUserServiceTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/application/service/ChangeExistingUserServiceTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/application/service/DeleteUsersByIdServiceTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/application/service/DeleteUsersByIdServiceTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/application/service/FindUserServiceTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/application/service/FindUserServiceTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/application/service/SubmitNewUserServiceTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/application/service/SubmitNewUserServiceTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/architecture/DomainArchitectureTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/architecture/DomainArchitectureTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/architecture/LayersArchitectureTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/architecture/LayersArchitectureTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/domain/PhoneTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/domain/PhoneTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/domain/UserFunctionsTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/domain/UserFunctionsTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/infrastructure/validator/ObjectValidatorTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/infrastructure/validator/ObjectValidatorTest.java -------------------------------------------------------------------------------- /src/test/java/com/example/service/user/utils/DataFaker.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/java/com/example/service/user/utils/DataFaker.java -------------------------------------------------------------------------------- /src/test/resources/application.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naspredam/rest-spring-boot-hexagonal-architecture/HEAD/src/test/resources/application.yaml --------------------------------------------------------------------------------