added architecture tests
This commit is contained in:
8
adapter/addressvalidation/mvnw
vendored
8
adapter/addressvalidation/mvnw
vendored
@@ -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 "$@"
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
8
adapter/persistence/mvnw
vendored
8
adapter/persistence/mvnw
vendored
@@ -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 "$@"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
8
adapter/web/mvnw
vendored
8
adapter/web/mvnw
vendored
@@ -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 "$@"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
8
application/mvnw
vendored
8
application/mvnw
vendored
@@ -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 "$@"
|
||||
|
||||
@@ -51,6 +51,10 @@
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok-mapstruct-binding</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.transaction</groupId>
|
||||
<artifactId>javax.transaction-api</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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<Customer> getAll();
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
@@ -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) {
|
||||
@@ -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) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package de.strasser.peter.hexagonal.application.customer.exception;
|
||||
package de.strasser.peter.hexagonal.application.exception;
|
||||
|
||||
public class DefaultAdressRequiredToActivateExc extends BusinessException {
|
||||
|
||||
@@ -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) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package de.strasser.peter.hexagonal.application.customer.exception;
|
||||
package de.strasser.peter.hexagonal.application.exception;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package de.strasser.peter.hexagonal.application.mapper;
|
||||
|
||||
import lombok.Value;
|
||||
|
||||
@Value
|
||||
public class Test {
|
||||
private String test;
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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<Customer> getAll();
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
8
config/mvnw
vendored
8
config/mvnw
vendored
@@ -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 "$@"
|
||||
|
||||
@@ -48,7 +48,11 @@
|
||||
<groupId>de.strasser.peter.hexagonal</groupId>
|
||||
<artifactId>persistence</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.tngtech.archunit</groupId>
|
||||
<artifactId>archunit-junit5</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
@@ -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..");
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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..");
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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<JavaClass> 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..");
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
package de.strasser.peter.hexagonal.config;
|
||||
|
||||
public class ArchitectureTest {}
|
||||
Reference in New Issue
Block a user