diff --git a/adapter/addressvalidation/mvnw b/adapter/addressvalidation/mvnw index 8ae6456..3c8a553 100644 --- a/adapter/addressvalidation/mvnw +++ b/adapter/addressvalidation/mvnw @@ -316,7 +316,7 @@ export MAVEN_CMD_LINE_ARGS WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ -$MAVEN_OPTS \ --classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ -"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ -${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/adapter/addressvalidation/src/main/java/de/strasser/peter/hexagonal/addressvalidation/AddressValidator.java b/adapter/addressvalidation/src/main/java/de/strasser/peter/hexagonal/addressvalidation/AddressValidator.java index f307887..4d0d408 100644 --- a/adapter/addressvalidation/src/main/java/de/strasser/peter/hexagonal/addressvalidation/AddressValidator.java +++ b/adapter/addressvalidation/src/main/java/de/strasser/peter/hexagonal/addressvalidation/AddressValidator.java @@ -1,8 +1,8 @@ package de.strasser.peter.hexagonal.addressvalidation; -import de.strasser.peter.hexagonal.application.customer.domain.Address; -import de.strasser.peter.hexagonal.application.customer.port.out.AddressValidatorPort; -import de.strasser.peter.hexagonal.application.customer.port.out.commands.ValidateAddressCommand; +import de.strasser.peter.hexagonal.application.domain.Address; +import de.strasser.peter.hexagonal.application.port.out.AddressValidatorPort; +import de.strasser.peter.hexagonal.application.port.out.commands.ValidateAddressCommand; import de.strasser.peter.hexagonal.common.Adapter; import lombok.extern.slf4j.Slf4j; diff --git a/adapter/addressvalidation/src/main/java/de/strasser/peter/hexagonal/addressvalidation/InvalidAddressExc.java b/adapter/addressvalidation/src/main/java/de/strasser/peter/hexagonal/addressvalidation/InvalidAddressExc.java index 02855f1..91b6bbc 100644 --- a/adapter/addressvalidation/src/main/java/de/strasser/peter/hexagonal/addressvalidation/InvalidAddressExc.java +++ b/adapter/addressvalidation/src/main/java/de/strasser/peter/hexagonal/addressvalidation/InvalidAddressExc.java @@ -1,7 +1,7 @@ package de.strasser.peter.hexagonal.addressvalidation; -import de.strasser.peter.hexagonal.application.customer.exception.BusinessException; -import de.strasser.peter.hexagonal.application.customer.port.out.commands.ValidateAddressCommand; +import de.strasser.peter.hexagonal.application.exception.BusinessException; +import de.strasser.peter.hexagonal.application.port.out.commands.ValidateAddressCommand; public class InvalidAddressExc extends BusinessException { public InvalidAddressExc(ValidateAddressCommand validateAddressCommand) { diff --git a/adapter/persistence/mvnw b/adapter/persistence/mvnw index 8ae6456..3c8a553 100644 --- a/adapter/persistence/mvnw +++ b/adapter/persistence/mvnw @@ -316,7 +316,7 @@ export MAVEN_CMD_LINE_ARGS WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ -$MAVEN_OPTS \ --classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ -"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ -${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/CustomerDao.java b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/CustomerDao.java index f49bcb2..e3a7a8d 100644 --- a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/CustomerDao.java +++ b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/CustomerDao.java @@ -1,9 +1,9 @@ package de.strasser.peter.hexagonal.persistence; -import de.strasser.peter.hexagonal.application.customer.domain.Customer; -import de.strasser.peter.hexagonal.application.customer.port.in.QueryAllCustomersCRUD; -import de.strasser.peter.hexagonal.application.customer.port.out.LoadCustomerPort; -import de.strasser.peter.hexagonal.application.customer.port.out.SaveCustomerPort; +import de.strasser.peter.hexagonal.application.domain.Customer; +import de.strasser.peter.hexagonal.application.port.in.QueryAllCustomersCRUD; +import de.strasser.peter.hexagonal.application.port.out.LoadCustomerPort; +import de.strasser.peter.hexagonal.application.port.out.SaveCustomerPort; import de.strasser.peter.hexagonal.persistence.errors.CustomerDoesNotExistExc; import de.strasser.peter.hexagonal.persistence.mapper.CustomerMapper; import de.strasser.peter.hexagonal.persistence.model.CustomerEntity; diff --git a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/errors/CustomerDoesNotExistExc.java b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/errors/CustomerDoesNotExistExc.java index 9884ef5..c6b1e19 100644 --- a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/errors/CustomerDoesNotExistExc.java +++ b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/errors/CustomerDoesNotExistExc.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.persistence.errors; -import de.strasser.peter.hexagonal.application.customer.exception.BusinessException; +import de.strasser.peter.hexagonal.application.exception.BusinessException; import java.math.BigInteger; diff --git a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/mapper/CustomerMapper.java b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/mapper/CustomerMapper.java index fed47cd..29dcada 100644 --- a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/mapper/CustomerMapper.java +++ b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/mapper/CustomerMapper.java @@ -1,7 +1,7 @@ package de.strasser.peter.hexagonal.persistence.mapper; -import de.strasser.peter.hexagonal.application.customer.domain.Address; -import de.strasser.peter.hexagonal.application.customer.domain.Customer; +import de.strasser.peter.hexagonal.application.domain.Address; +import de.strasser.peter.hexagonal.application.domain.Customer; import de.strasser.peter.hexagonal.persistence.model.CustomerEntity; import org.mapstruct.Mapper; import org.springframework.core.convert.converter.Converter; diff --git a/adapter/persistence/src/test/java/de/strasser/peter/hexagonal/persistence/CustomerDaoTest.java b/adapter/persistence/src/test/java/de/strasser/peter/hexagonal/persistence/CustomerDaoTest.java index 0408829..ec8705a 100644 --- a/adapter/persistence/src/test/java/de/strasser/peter/hexagonal/persistence/CustomerDaoTest.java +++ b/adapter/persistence/src/test/java/de/strasser/peter/hexagonal/persistence/CustomerDaoTest.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.persistence; -import de.strasser.peter.hexagonal.application.customer.domain.Customer; +import de.strasser.peter.hexagonal.application.domain.Customer; import de.strasser.peter.hexagonal.persistence.mapper.CustomerMapperImpl; import de.strasser.peter.hexagonal.persistence.repository.CustomerRepository; import org.junit.jupiter.api.AfterEach; diff --git a/adapter/web/mvnw b/adapter/web/mvnw index 8ae6456..3c8a553 100644 --- a/adapter/web/mvnw +++ b/adapter/web/mvnw @@ -316,7 +316,7 @@ export MAVEN_CMD_LINE_ARGS WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ -$MAVEN_OPTS \ --classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ -"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ -${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/AddAddressController.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/AddAddressController.java index 49859cf..cae3582 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/AddAddressController.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/AddAddressController.java @@ -1,7 +1,7 @@ package de.strasser.peter.hexagonal.web; -import de.strasser.peter.hexagonal.application.customer.port.in.AddAddressUseCase; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.AddAddressCommand; +import de.strasser.peter.hexagonal.application.port.in.AddAddressUseCase; +import de.strasser.peter.hexagonal.application.port.in.commands.AddAddressCommand; import de.strasser.peter.hexagonal.common.Adapter; import de.strasser.peter.hexagonal.web.dto.request.AddAddressRequest; import de.strasser.peter.hexagonal.web.mapper.AddAddressWebMapper; diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/CustomerCRUDController.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/CustomerCRUDController.java index 584de73..791de79 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/CustomerCRUDController.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/CustomerCRUDController.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.web; -import de.strasser.peter.hexagonal.application.customer.port.in.QueryAllCustomersCRUD; +import de.strasser.peter.hexagonal.application.port.in.QueryAllCustomersCRUD; import de.strasser.peter.hexagonal.common.Adapter; import de.strasser.peter.hexagonal.web.dto.response.CustomerResponse; import de.strasser.peter.hexagonal.web.mapper.CustomerWebMapper; diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/RegisterCustomerController.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/RegisterCustomerController.java index b522aad..c774b62 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/RegisterCustomerController.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/RegisterCustomerController.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.web; -import de.strasser.peter.hexagonal.application.customer.port.in.RegisterCustomerUseCase; +import de.strasser.peter.hexagonal.application.port.in.RegisterCustomerUseCase; import de.strasser.peter.hexagonal.common.Adapter; import de.strasser.peter.hexagonal.web.dto.request.RegisterCustomerRequest; import de.strasser.peter.hexagonal.web.mapper.RegisterCustomerWebMapper; diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/errors/ErrorHandling.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/errors/ErrorHandling.java index c33a2f3..a9cbb46 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/errors/ErrorHandling.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/errors/ErrorHandling.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.web.errors; -import de.strasser.peter.hexagonal.application.customer.exception.BusinessException; +import de.strasser.peter.hexagonal.application.exception.BusinessException; import lombok.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/AddAddressWebMapper.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/AddAddressWebMapper.java index 36b6788..b488459 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/AddAddressWebMapper.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/AddAddressWebMapper.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.web.mapper; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.AddAddressCommand; +import de.strasser.peter.hexagonal.application.port.in.commands.AddAddressCommand; import de.strasser.peter.hexagonal.web.dto.request.AddAddressRequest; import org.mapstruct.Mapper; diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/CustomerWebMapper.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/CustomerWebMapper.java index ff63998..cd47440 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/CustomerWebMapper.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/CustomerWebMapper.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.web.mapper; -import de.strasser.peter.hexagonal.application.customer.domain.Customer; +import de.strasser.peter.hexagonal.application.domain.Customer; import de.strasser.peter.hexagonal.web.dto.response.CustomerResponse; import org.mapstruct.Mapper; diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/RegisterCustomerWebMapper.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/RegisterCustomerWebMapper.java index 3b935ab..d1fce9b 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/RegisterCustomerWebMapper.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/web/mapper/RegisterCustomerWebMapper.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.web.mapper; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.RegisterCustomerCommand; +import de.strasser.peter.hexagonal.application.port.in.commands.RegisterCustomerCommand; import de.strasser.peter.hexagonal.web.dto.request.RegisterCustomerRequest; import org.mapstruct.Mapper; import org.mapstruct.Mapping; diff --git a/adapter/web/src/test/java/de/strasser/peter/hexagonal/web/AddAddressControllerTest.java b/adapter/web/src/test/java/de/strasser/peter/hexagonal/web/AddAddressControllerTest.java index a220061..a1c4ae7 100644 --- a/adapter/web/src/test/java/de/strasser/peter/hexagonal/web/AddAddressControllerTest.java +++ b/adapter/web/src/test/java/de/strasser/peter/hexagonal/web/AddAddressControllerTest.java @@ -1,8 +1,8 @@ package de.strasser.peter.hexagonal.web; -import de.strasser.peter.hexagonal.application.customer.port.in.AddAddressUseCase; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.AddAddressCommand; -import de.strasser.peter.hexagonal.common.validators.ReadStringResources; +import de.strasser.peter.hexagonal.application.port.in.AddAddressUseCase; +import de.strasser.peter.hexagonal.application.port.in.commands.AddAddressCommand; +import de.strasser.peter.hexagonal.common.ReadStringResources; import de.strasser.peter.hexagonal.web.mapper.AddAddressWebMapperImpl; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; diff --git a/adapter/web/src/test/java/de/strasser/peter/hexagonal/web/RegisterCustomerControllerTest.java b/adapter/web/src/test/java/de/strasser/peter/hexagonal/web/RegisterCustomerControllerTest.java index 94b3beb..8bc6d1f 100644 --- a/adapter/web/src/test/java/de/strasser/peter/hexagonal/web/RegisterCustomerControllerTest.java +++ b/adapter/web/src/test/java/de/strasser/peter/hexagonal/web/RegisterCustomerControllerTest.java @@ -1,8 +1,8 @@ package de.strasser.peter.hexagonal.web; -import de.strasser.peter.hexagonal.application.customer.port.in.RegisterCustomerUseCase; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.RegisterCustomerCommand; -import de.strasser.peter.hexagonal.common.validators.ReadStringResources; +import de.strasser.peter.hexagonal.application.port.in.RegisterCustomerUseCase; +import de.strasser.peter.hexagonal.application.port.in.commands.RegisterCustomerCommand; +import de.strasser.peter.hexagonal.common.ReadStringResources; import de.strasser.peter.hexagonal.web.mapper.RegisterCustomerWebMapperImpl; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; diff --git a/application/mvnw b/application/mvnw index 8ae6456..3c8a553 100644 --- a/application/mvnw +++ b/application/mvnw @@ -316,7 +316,7 @@ export MAVEN_CMD_LINE_ARGS WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ -$MAVEN_OPTS \ --classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ -"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ -${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/application/pom.xml b/application/pom.xml index d7a6337..73791a8 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -51,6 +51,10 @@ org.projectlombok lombok-mapstruct-binding + + javax.transaction + javax.transaction-api + diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/mapper/AddAddressMapper.java b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/mapper/AddAddressMapper.java deleted file mode 100644 index f45d7b3..0000000 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/mapper/AddAddressMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.strasser.peter.hexagonal.application.customer.mapper; - -import de.strasser.peter.hexagonal.application.customer.port.in.commands.AddAddressCommand; -import de.strasser.peter.hexagonal.application.customer.port.out.commands.ValidateAddressCommand; -import org.mapstruct.Mapper; - -@Mapper -public interface AddAddressMapper { - ValidateAddressCommand toOutCmd(AddAddressCommand addAddressCommand); -} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/QueryAllCustomersCRUD.java b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/QueryAllCustomersCRUD.java deleted file mode 100644 index 3a9f2d7..0000000 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/QueryAllCustomersCRUD.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.strasser.peter.hexagonal.application.customer.port.in; - -import de.strasser.peter.hexagonal.application.customer.domain.Customer; - -import java.util.List; - -public interface QueryAllCustomersCRUD { - List getAll(); -} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/RegisterCustomerUseCase.java b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/RegisterCustomerUseCase.java deleted file mode 100644 index ea7df94..0000000 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/RegisterCustomerUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.strasser.peter.hexagonal.application.customer.port.in; - -import de.strasser.peter.hexagonal.application.customer.port.in.commands.RegisterCustomerCommand; - -import javax.validation.Valid; - -public interface RegisterCustomerUseCase { - void register(@Valid RegisterCustomerCommand registerCustomerCommand); -} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/AddressValidatorPort.java b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/AddressValidatorPort.java deleted file mode 100644 index 4b25f7f..0000000 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/AddressValidatorPort.java +++ /dev/null @@ -1,8 +0,0 @@ -package de.strasser.peter.hexagonal.application.customer.port.out; - -import de.strasser.peter.hexagonal.application.customer.domain.Address; -import de.strasser.peter.hexagonal.application.customer.port.out.commands.ValidateAddressCommand; - -public interface AddressValidatorPort { - Address validate(ValidateAddressCommand validateAddressCommand); -} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/LoadCustomerPort.java b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/LoadCustomerPort.java deleted file mode 100644 index ab24b30..0000000 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/LoadCustomerPort.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.strasser.peter.hexagonal.application.customer.port.out; - -import de.strasser.peter.hexagonal.application.customer.domain.Customer; - -import java.math.BigInteger; - -public interface LoadCustomerPort { - Customer findById(BigInteger id); -} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/SaveCustomerPort.java b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/SaveCustomerPort.java deleted file mode 100644 index 873e470..0000000 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/SaveCustomerPort.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.strasser.peter.hexagonal.application.customer.port.out; - -import de.strasser.peter.hexagonal.application.customer.domain.Customer; - -public interface SaveCustomerPort { - void upsert(Customer customer); -} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/domain/Address.java b/application/src/main/java/de/strasser/peter/hexagonal/application/domain/Address.java similarity index 77% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/domain/Address.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/domain/Address.java index 24edd08..bb6547b 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/domain/Address.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/domain/Address.java @@ -1,6 +1,6 @@ -package de.strasser.peter.hexagonal.application.customer.domain; +package de.strasser.peter.hexagonal.application.domain; -import de.strasser.peter.hexagonal.application.customer.exception.AddressTypeDoesNotExistsExc; +import de.strasser.peter.hexagonal.application.exception.AddressTypeDoesNotExistsExc; import lombok.Value; @Value diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/domain/Customer.java b/application/src/main/java/de/strasser/peter/hexagonal/application/domain/Customer.java similarity index 89% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/domain/Customer.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/domain/Customer.java index 65832d9..e119dde 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/domain/Customer.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/domain/Customer.java @@ -1,7 +1,7 @@ -package de.strasser.peter.hexagonal.application.customer.domain; +package de.strasser.peter.hexagonal.application.domain; -import de.strasser.peter.hexagonal.application.customer.exception.TooOldToDeactivateExc; -import de.strasser.peter.hexagonal.application.customer.exception.TooYoungExc; +import de.strasser.peter.hexagonal.application.exception.TooOldToDeactivateExc; +import de.strasser.peter.hexagonal.application.exception.TooYoungExc; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/AddressTypeDoesNotExistsExc.java b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/AddressTypeDoesNotExistsExc.java similarity index 74% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/AddressTypeDoesNotExistsExc.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/exception/AddressTypeDoesNotExistsExc.java index 89edf99..417de91 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/AddressTypeDoesNotExistsExc.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/AddressTypeDoesNotExistsExc.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.application.customer.exception; +package de.strasser.peter.hexagonal.application.exception; public class AddressTypeDoesNotExistsExc extends BusinessException { public AddressTypeDoesNotExistsExc(String type) { diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/BusinessException.java b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/BusinessException.java similarity index 67% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/BusinessException.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/exception/BusinessException.java index ff68b7d..38aba59 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/BusinessException.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/BusinessException.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.application.customer.exception; +package de.strasser.peter.hexagonal.application.exception; public abstract class BusinessException extends IllegalStateException { public BusinessException(String error) { diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/DefaultAdressRequiredToActivateExc.java b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/DefaultAdressRequiredToActivateExc.java similarity index 76% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/DefaultAdressRequiredToActivateExc.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/exception/DefaultAdressRequiredToActivateExc.java index 61ce35c..cb0fd53 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/DefaultAdressRequiredToActivateExc.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/DefaultAdressRequiredToActivateExc.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.application.customer.exception; +package de.strasser.peter.hexagonal.application.exception; public class DefaultAdressRequiredToActivateExc extends BusinessException { diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/TooOldToDeactivateExc.java b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/TooOldToDeactivateExc.java similarity index 74% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/TooOldToDeactivateExc.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/exception/TooOldToDeactivateExc.java index 1c52a45..d019aa6 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/TooOldToDeactivateExc.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/TooOldToDeactivateExc.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.application.customer.exception; +package de.strasser.peter.hexagonal.application.exception; public class TooOldToDeactivateExc extends BusinessException { public TooOldToDeactivateExc(int age) { diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/TooYoungExc.java b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/TooYoungExc.java similarity index 76% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/TooYoungExc.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/exception/TooYoungExc.java index 13fb051..188f2f7 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/TooYoungExc.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/exception/TooYoungExc.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.application.customer.exception; +package de.strasser.peter.hexagonal.application.exception; import java.text.MessageFormat; diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/mapper/AddAddressMapper.java b/application/src/main/java/de/strasser/peter/hexagonal/application/mapper/AddAddressMapper.java new file mode 100644 index 0000000..ad32ee4 --- /dev/null +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/mapper/AddAddressMapper.java @@ -0,0 +1,10 @@ +package de.strasser.peter.hexagonal.application.mapper; + +import de.strasser.peter.hexagonal.application.port.in.commands.AddAddressCommand; +import de.strasser.peter.hexagonal.application.port.out.commands.ValidateAddressCommand; +import org.mapstruct.Mapper; + +@Mapper +public interface AddAddressMapper { + ValidateAddressCommand toOutCmd(AddAddressCommand addAddressCommand); +} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/mapper/Test.java b/application/src/main/java/de/strasser/peter/hexagonal/application/mapper/Test.java new file mode 100644 index 0000000..c4bfef5 --- /dev/null +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/mapper/Test.java @@ -0,0 +1,8 @@ +package de.strasser.peter.hexagonal.application.mapper; + +import lombok.Value; + +@Value +public class Test { + private String test; +} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/AddAddressUseCase.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/AddAddressUseCase.java similarity index 67% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/AddAddressUseCase.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/port/in/AddAddressUseCase.java index ae24f93..24f77f4 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/AddAddressUseCase.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/AddAddressUseCase.java @@ -1,6 +1,6 @@ -package de.strasser.peter.hexagonal.application.customer.port.in; +package de.strasser.peter.hexagonal.application.port.in; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.AddAddressCommand; +import de.strasser.peter.hexagonal.application.port.in.commands.AddAddressCommand; import javax.validation.Valid; import javax.validation.constraints.Min; diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/QueryAllCustomersCRUD.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/QueryAllCustomersCRUD.java new file mode 100644 index 0000000..9cc9256 --- /dev/null +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/QueryAllCustomersCRUD.java @@ -0,0 +1,9 @@ +package de.strasser.peter.hexagonal.application.port.in; + +import de.strasser.peter.hexagonal.application.domain.Customer; + +import java.util.List; + +public interface QueryAllCustomersCRUD { + List getAll(); +} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/RegisterCustomerUseCase.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/RegisterCustomerUseCase.java new file mode 100644 index 0000000..f8b22af --- /dev/null +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/RegisterCustomerUseCase.java @@ -0,0 +1,9 @@ +package de.strasser.peter.hexagonal.application.port.in; + +import de.strasser.peter.hexagonal.application.port.in.commands.RegisterCustomerCommand; + +import javax.validation.Valid; + +public interface RegisterCustomerUseCase { + void register(@Valid RegisterCustomerCommand registerCustomerCommand); +} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/commands/AddAddressCommand.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/commands/AddAddressCommand.java similarity index 84% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/commands/AddAddressCommand.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/port/in/commands/AddAddressCommand.java index 38dffe4..dc58776 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/commands/AddAddressCommand.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/commands/AddAddressCommand.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.application.customer.port.in.commands; +package de.strasser.peter.hexagonal.application.port.in.commands; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/commands/RegisterCustomerCommand.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/commands/RegisterCustomerCommand.java similarity index 71% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/commands/RegisterCustomerCommand.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/port/in/commands/RegisterCustomerCommand.java index 26e2254..589c95e 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/in/commands/RegisterCustomerCommand.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/in/commands/RegisterCustomerCommand.java @@ -1,6 +1,6 @@ -package de.strasser.peter.hexagonal.application.customer.port.in.commands; +package de.strasser.peter.hexagonal.application.port.in.commands; -import de.strasser.peter.hexagonal.application.customer.validator.SecurePassword; +import de.strasser.peter.hexagonal.application.validator.SecurePassword; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/AddressValidatorPort.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/AddressValidatorPort.java new file mode 100644 index 0000000..e55f62e --- /dev/null +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/AddressValidatorPort.java @@ -0,0 +1,8 @@ +package de.strasser.peter.hexagonal.application.port.out; + +import de.strasser.peter.hexagonal.application.domain.Address; +import de.strasser.peter.hexagonal.application.port.out.commands.ValidateAddressCommand; + +public interface AddressValidatorPort { + Address validate(ValidateAddressCommand validateAddressCommand); +} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/LoadCustomerPort.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/LoadCustomerPort.java new file mode 100644 index 0000000..489cd49 --- /dev/null +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/LoadCustomerPort.java @@ -0,0 +1,9 @@ +package de.strasser.peter.hexagonal.application.port.out; + +import de.strasser.peter.hexagonal.application.domain.Customer; + +import java.math.BigInteger; + +public interface LoadCustomerPort { + Customer findById(BigInteger id); +} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/SaveCustomerPort.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/SaveCustomerPort.java new file mode 100644 index 0000000..dbafb82 --- /dev/null +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/SaveCustomerPort.java @@ -0,0 +1,7 @@ +package de.strasser.peter.hexagonal.application.port.out; + +import de.strasser.peter.hexagonal.application.domain.Customer; + +public interface SaveCustomerPort { + void upsert(Customer customer); +} diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/commands/ValidateAddressCommand.java b/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/commands/ValidateAddressCommand.java similarity index 77% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/commands/ValidateAddressCommand.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/port/out/commands/ValidateAddressCommand.java index 920ec5e..77206f0 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/commands/ValidateAddressCommand.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/port/out/commands/ValidateAddressCommand.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.application.customer.port.out.commands; +package de.strasser.peter.hexagonal.application.port.out.commands; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/service/AddressService.java b/application/src/main/java/de/strasser/peter/hexagonal/application/service/AddressService.java similarity index 63% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/service/AddressService.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/service/AddressService.java index c89c81f..3f158f3 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/service/AddressService.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/service/AddressService.java @@ -1,16 +1,18 @@ -package de.strasser.peter.hexagonal.application.customer.service; +package de.strasser.peter.hexagonal.application.service; -import de.strasser.peter.hexagonal.application.customer.domain.Address; -import de.strasser.peter.hexagonal.application.customer.domain.Customer; -import de.strasser.peter.hexagonal.application.customer.mapper.AddAddressMapper; -import de.strasser.peter.hexagonal.application.customer.port.in.AddAddressUseCase; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.AddAddressCommand; -import de.strasser.peter.hexagonal.application.customer.port.out.AddressValidatorPort; -import de.strasser.peter.hexagonal.application.customer.port.out.LoadCustomerPort; -import de.strasser.peter.hexagonal.application.customer.port.out.SaveCustomerPort; +import de.strasser.peter.hexagonal.application.domain.Address; +import de.strasser.peter.hexagonal.application.domain.Customer; +import de.strasser.peter.hexagonal.application.mapper.AddAddressMapper; +import de.strasser.peter.hexagonal.application.mapper.Test; +import de.strasser.peter.hexagonal.application.port.in.AddAddressUseCase; +import de.strasser.peter.hexagonal.application.port.in.commands.AddAddressCommand; +import de.strasser.peter.hexagonal.application.port.out.AddressValidatorPort; +import de.strasser.peter.hexagonal.application.port.out.LoadCustomerPort; +import de.strasser.peter.hexagonal.application.port.out.SaveCustomerPort; +import de.strasser.peter.hexagonal.common.UseCase; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; +import javax.transaction.Transactional; import javax.validation.Valid; import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; @@ -19,7 +21,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -@Service +@UseCase +@Transactional @RequiredArgsConstructor class AddressService implements AddAddressUseCase { private final SaveCustomerPort saveCustomerAdapter; @@ -36,7 +39,7 @@ class AddressService implements AddAddressUseCase { addAddressCmds.forEach(addAddressCommand -> validateAndAddToMap(addresses, addAddressCommand)); customer.addAddresses(addresses); - + new Test("he"); saveCustomerAdapter.upsert(customer); } diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/service/RegisterCustomerService.java b/application/src/main/java/de/strasser/peter/hexagonal/application/service/RegisterCustomerService.java similarity index 58% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/service/RegisterCustomerService.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/service/RegisterCustomerService.java index 13ecc8c..e4d9d05 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/service/RegisterCustomerService.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/service/RegisterCustomerService.java @@ -1,19 +1,19 @@ -package de.strasser.peter.hexagonal.application.customer.service; +package de.strasser.peter.hexagonal.application.service; -import de.strasser.peter.hexagonal.application.customer.domain.Customer; -import de.strasser.peter.hexagonal.application.customer.port.in.RegisterCustomerUseCase; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.RegisterCustomerCommand; -import de.strasser.peter.hexagonal.application.customer.port.out.SaveCustomerPort; +import de.strasser.peter.hexagonal.application.domain.Customer; +import de.strasser.peter.hexagonal.application.port.in.RegisterCustomerUseCase; +import de.strasser.peter.hexagonal.application.port.in.commands.RegisterCustomerCommand; +import de.strasser.peter.hexagonal.application.port.out.SaveCustomerPort; +import de.strasser.peter.hexagonal.common.UseCase; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import javax.transaction.Transactional; import javax.validation.Valid; -@Slf4j -@Service +@UseCase @Validated +@Transactional @RequiredArgsConstructor class RegisterCustomerService implements RegisterCustomerUseCase { private final SaveCustomerPort saveUser; diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/validator/SecurePassword.java b/application/src/main/java/de/strasser/peter/hexagonal/application/validator/SecurePassword.java similarity index 96% rename from application/src/main/java/de/strasser/peter/hexagonal/application/customer/validator/SecurePassword.java rename to application/src/main/java/de/strasser/peter/hexagonal/application/validator/SecurePassword.java index 3053d3e..618b0c8 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/validator/SecurePassword.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/validator/SecurePassword.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.application.customer.validator; +package de.strasser.peter.hexagonal.application.validator; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; diff --git a/application/src/test/java/de/strasser/peter/hexagonal/application/TestConfiguration.java b/application/src/test/java/de/strasser/peter/hexagonal/application/TestConfiguration.java index 153988a..04da687 100644 --- a/application/src/test/java/de/strasser/peter/hexagonal/application/TestConfiguration.java +++ b/application/src/test/java/de/strasser/peter/hexagonal/application/TestConfiguration.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.application; -import de.strasser.peter.hexagonal.application.customer.mapper.AddAddressMapper; +import de.strasser.peter.hexagonal.application.mapper.AddAddressMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.mock.mockito.SpyBean; diff --git a/application/src/test/java/de/strasser/peter/hexagonal/application/customer/domain/CustomerTest.java b/application/src/test/java/de/strasser/peter/hexagonal/application/domain/CustomerTest.java similarity index 88% rename from application/src/test/java/de/strasser/peter/hexagonal/application/customer/domain/CustomerTest.java rename to application/src/test/java/de/strasser/peter/hexagonal/application/domain/CustomerTest.java index c0ebd0d..470c423 100644 --- a/application/src/test/java/de/strasser/peter/hexagonal/application/customer/domain/CustomerTest.java +++ b/application/src/test/java/de/strasser/peter/hexagonal/application/domain/CustomerTest.java @@ -1,7 +1,7 @@ -package de.strasser.peter.hexagonal.application.customer.domain; +package de.strasser.peter.hexagonal.application.domain; -import de.strasser.peter.hexagonal.application.customer.exception.TooOldToDeactivateExc; -import de.strasser.peter.hexagonal.application.customer.exception.TooYoungExc; +import de.strasser.peter.hexagonal.application.exception.TooOldToDeactivateExc; +import de.strasser.peter.hexagonal.application.exception.TooYoungExc; import org.junit.jupiter.api.Test; import java.time.LocalDate; diff --git a/application/src/test/java/de/strasser/peter/hexagonal/application/customer/service/AddressServiceTest.java b/application/src/test/java/de/strasser/peter/hexagonal/application/service/AddressServiceTest.java similarity index 87% rename from application/src/test/java/de/strasser/peter/hexagonal/application/customer/service/AddressServiceTest.java rename to application/src/test/java/de/strasser/peter/hexagonal/application/service/AddressServiceTest.java index 7054059..56a3eb8 100644 --- a/application/src/test/java/de/strasser/peter/hexagonal/application/customer/service/AddressServiceTest.java +++ b/application/src/test/java/de/strasser/peter/hexagonal/application/service/AddressServiceTest.java @@ -1,12 +1,12 @@ -package de.strasser.peter.hexagonal.application.customer.service; +package de.strasser.peter.hexagonal.application.service; -import de.strasser.peter.hexagonal.application.customer.domain.Address; -import de.strasser.peter.hexagonal.application.customer.domain.Customer; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.AddAddressCommand; -import de.strasser.peter.hexagonal.application.customer.port.out.AddressValidatorPort; -import de.strasser.peter.hexagonal.application.customer.port.out.LoadCustomerPort; -import de.strasser.peter.hexagonal.application.customer.port.out.SaveCustomerPort; -import de.strasser.peter.hexagonal.application.customer.port.out.commands.ValidateAddressCommand; +import de.strasser.peter.hexagonal.application.domain.Address; +import de.strasser.peter.hexagonal.application.domain.Customer; +import de.strasser.peter.hexagonal.application.port.in.commands.AddAddressCommand; +import de.strasser.peter.hexagonal.application.port.out.AddressValidatorPort; +import de.strasser.peter.hexagonal.application.port.out.LoadCustomerPort; +import de.strasser.peter.hexagonal.application.port.out.SaveCustomerPort; +import de.strasser.peter.hexagonal.application.port.out.commands.ValidateAddressCommand; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; diff --git a/application/src/test/java/de/strasser/peter/hexagonal/application/customer/service/RegisterCustomerServiceTest.java b/application/src/test/java/de/strasser/peter/hexagonal/application/service/RegisterCustomerServiceTest.java similarity index 82% rename from application/src/test/java/de/strasser/peter/hexagonal/application/customer/service/RegisterCustomerServiceTest.java rename to application/src/test/java/de/strasser/peter/hexagonal/application/service/RegisterCustomerServiceTest.java index 073ef02..8f82b6c 100644 --- a/application/src/test/java/de/strasser/peter/hexagonal/application/customer/service/RegisterCustomerServiceTest.java +++ b/application/src/test/java/de/strasser/peter/hexagonal/application/service/RegisterCustomerServiceTest.java @@ -1,9 +1,9 @@ -package de.strasser.peter.hexagonal.application.customer.service; +package de.strasser.peter.hexagonal.application.service; -import de.strasser.peter.hexagonal.application.customer.port.in.commands.RegisterCustomerCommand; -import de.strasser.peter.hexagonal.application.customer.port.out.AddressValidatorPort; -import de.strasser.peter.hexagonal.application.customer.port.out.LoadCustomerPort; -import de.strasser.peter.hexagonal.application.customer.port.out.SaveCustomerPort; +import de.strasser.peter.hexagonal.application.port.in.commands.RegisterCustomerCommand; +import de.strasser.peter.hexagonal.application.port.out.AddressValidatorPort; +import de.strasser.peter.hexagonal.application.port.out.LoadCustomerPort; +import de.strasser.peter.hexagonal.application.port.out.SaveCustomerPort; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/config/mvnw b/config/mvnw index 8ae6456..3c8a553 100644 --- a/config/mvnw +++ b/config/mvnw @@ -316,7 +316,7 @@ export MAVEN_CMD_LINE_ARGS WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ -$MAVEN_OPTS \ --classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ -"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ -${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/config/pom.xml b/config/pom.xml index 5f69187..faa0be7 100644 --- a/config/pom.xml +++ b/config/pom.xml @@ -48,7 +48,11 @@ de.strasser.peter.hexagonal persistence - + + com.tngtech.archunit + archunit-junit5 + test + diff --git a/config/src/test/java/de/strasser/peter/hexagonal/DomainArchitectureTest.java b/config/src/test/java/de/strasser/peter/hexagonal/DomainArchitectureTest.java new file mode 100644 index 0000000..49f4eb9 --- /dev/null +++ b/config/src/test/java/de/strasser/peter/hexagonal/DomainArchitectureTest.java @@ -0,0 +1,20 @@ +package de.strasser.peter.hexagonal; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.lang.ArchRule; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; + +@AnalyzeClasses(packages = "de.strasser.peter.hexagonal") +public class DomainArchitectureTest { + + @ArchTest + static final ArchRule should_OnlyDependOnLombokAndExceptions = + classes() + .that() + .resideInAPackage("..domain..") + .should() + .onlyDependOnClassesThat() + .resideInAnyPackage("..lombok..", "..domain..", "java..", "..exception.."); +} diff --git a/config/src/test/java/de/strasser/peter/hexagonal/config/HexagonalApplicationTests.java b/config/src/test/java/de/strasser/peter/hexagonal/HexagonalApplicationTests.java similarity index 80% rename from config/src/test/java/de/strasser/peter/hexagonal/config/HexagonalApplicationTests.java rename to config/src/test/java/de/strasser/peter/hexagonal/HexagonalApplicationTests.java index fcdf943..83e1aca 100644 --- a/config/src/test/java/de/strasser/peter/hexagonal/config/HexagonalApplicationTests.java +++ b/config/src/test/java/de/strasser/peter/hexagonal/HexagonalApplicationTests.java @@ -1,4 +1,4 @@ -package de.strasser.peter.hexagonal.config; +package de.strasser.peter.hexagonal; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/config/src/test/java/de/strasser/peter/hexagonal/HexagonalArchitectureTest.java b/config/src/test/java/de/strasser/peter/hexagonal/HexagonalArchitectureTest.java new file mode 100644 index 0000000..8fc8a72 --- /dev/null +++ b/config/src/test/java/de/strasser/peter/hexagonal/HexagonalArchitectureTest.java @@ -0,0 +1,25 @@ +package de.strasser.peter.hexagonal; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.lang.ArchRule; + +import static com.tngtech.archunit.library.Architectures.onionArchitecture; + +@AnalyzeClasses(packages = "de.strasser.peter.hexagonal") +public class HexagonalArchitectureTest { + + /** + * See diagram at https://www.archunit.org/userguide/html/000_Index.html#Onion%20Architecture for + * what rules this enforces. + */ + @ArchTest + static final ArchRule should_FollowHexagonalRules = + onionArchitecture() + .domainModels("de.strasser.peter.hexagonal.application.domain..") + .domainServices("de.strasser.peter.hexagonal.application.service..") + .applicationServices("de.strasser.peter.hexagonal..") + .adapter("web", "de.strasser.peter.hexagonal.web..") + .adapter("persistence", "de.strasser.peter.hexagonal.persistence..") + .adapter("addressvalidation", "de.strasser.peter.hexagonal.addressvalidation.."); +} diff --git a/config/src/test/java/de/strasser/peter/hexagonal/PortsArchitectureTest.java b/config/src/test/java/de/strasser/peter/hexagonal/PortsArchitectureTest.java new file mode 100644 index 0000000..1d5880d --- /dev/null +++ b/config/src/test/java/de/strasser/peter/hexagonal/PortsArchitectureTest.java @@ -0,0 +1,29 @@ +package de.strasser.peter.hexagonal; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.lang.ArchRule; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; + +@AnalyzeClasses(packages = "de.strasser.peter.hexagonal.application.port") +public class PortsArchitectureTest { + + @ArchTest + static final ArchRule should_EndWithUseCaseOrCRUD_When_IsInPort = + classes() + .that() + .resideInAPackage("..in") + .should() + .haveSimpleNameEndingWith("UseCase") + .orShould() + .haveSimpleNameEndingWith("CRUD"); + + @ArchTest + static final ArchRule should_EndWithPort_When_IsOutPort = + classes().that().resideInAPackage("..out").should().haveSimpleNameEndingWith("Port"); + + @ArchTest + static final ArchRule should_EndWithCommand_When_IsCommandModel = + classes().that().resideInAPackage("..commands").should().haveSimpleNameEndingWith("Command"); +} diff --git a/config/src/test/java/de/strasser/peter/hexagonal/UseCaseArchitectureTest.java b/config/src/test/java/de/strasser/peter/hexagonal/UseCaseArchitectureTest.java new file mode 100644 index 0000000..bd228bf --- /dev/null +++ b/config/src/test/java/de/strasser/peter/hexagonal/UseCaseArchitectureTest.java @@ -0,0 +1,42 @@ +package de.strasser.peter.hexagonal; + +import com.tngtech.archunit.base.DescribedPredicate; +import com.tngtech.archunit.core.domain.JavaClass; +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.lang.ArchRule; +import de.strasser.peter.hexagonal.common.UseCase; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; + +@AnalyzeClasses(packages = "de.strasser.peter.hexagonal") +public class UseCaseArchitectureTest { + + static final DescribedPredicate portInterface = + JavaClass.Predicates.simpleNameEndingWith("UseCase"); + + @ArchTest + static final ArchRule should_BePackageVisibility_When_IsUsecase = + classes().that().areAnnotatedWith(UseCase.class).should().bePackagePrivate(); + + @ArchTest + static final ArchRule should_BeInPackageService_When_IsUsecase = + classes().that().areAnnotatedWith(UseCase.class).should().resideInAPackage("..service.."); + + @ArchTest + static final ArchRule should_ImplementOnlyPorts_When_IsUsecase = + classes().that().areAnnotatedWith(UseCase.class).should().implement(portInterface); + + @ArchTest + static final ArchRule should_NotDependOnAdapters_When_IsUsecase = + noClasses() + .that() + .areAnnotatedWith(UseCase.class) + .should() + .dependOnClassesThat() + .resideInAPackage("..persistence..") + .orShould() + .dependOnClassesThat() + .resideInAPackage("..web.."); +} diff --git a/config/src/test/java/de/strasser/peter/hexagonal/config/ArchitectureTest.java b/config/src/test/java/de/strasser/peter/hexagonal/config/ArchitectureTest.java deleted file mode 100644 index 755b4ec..0000000 --- a/config/src/test/java/de/strasser/peter/hexagonal/config/ArchitectureTest.java +++ /dev/null @@ -1,3 +0,0 @@ -package de.strasser.peter.hexagonal.config; - -public class ArchitectureTest {} diff --git a/pom.xml b/pom.xml index daef6ea..7512b98 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ com.tngtech.archunit - archunit + archunit-junit5 ${archunit.version} test