diff --git a/adapter/persistence/pom.xml b/adapter/persistence/pom.xml index cf0029d..4b82809 100644 --- a/adapter/persistence/pom.xml +++ b/adapter/persistence/pom.xml @@ -46,5 +46,46 @@ ${org.lombok.version} compile + + org.mapstruct + mapstruct + ${org.mapstruct.version} + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 14 + 14 + + + org.mapstruct + mapstruct-processor + ${org.mapstruct.version} + + + org.projectlombok + lombok + ${org.lombok.version} + + + + + + -Amapstruct.defaultInjectionStrategy=constructor + + + -Amapstruct.defaultComponentModel=spring + + + + + + + + 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 0b7e46f..327fa71 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 @@ -3,12 +3,14 @@ package de.strasser.peter.hexagonal.persistence; import de.strasser.peter.hexagonal.application.customer.domain.Customer; import de.strasser.peter.hexagonal.application.customer.port.out.LoadCustomerAdapter; import de.strasser.peter.hexagonal.application.customer.port.out.SaveCustomerAdapter; +import de.strasser.peter.hexagonal.persistence.mapper.CustomerMapper; import de.strasser.peter.hexagonal.persistence.model.CustomerEntity; import de.strasser.peter.hexagonal.persistence.repository.CustomerRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; +import java.math.BigInteger; import java.time.LocalDate; import java.util.HashMap; import java.util.Optional; @@ -18,14 +20,16 @@ import java.util.Optional; @RequiredArgsConstructor public class CustomerDao implements SaveCustomerAdapter, LoadCustomerAdapter { private final CustomerRepository customerRepository; + private final CustomerMapper customerMapper; @Override public void upsert(Customer customer) { log.info("saving customer"); + customerRepository.save(customerMapper.toDbEntity(customer)); } @Override - public Customer findById(Integer id) { + public Customer findById(BigInteger id) { Optional byId = customerRepository.findById(id); return Customer.createCustomer(id, "max", 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 b7ab99b..38b449b 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 @@ -3,13 +3,15 @@ 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.persistence.model.CustomerEntity; -import org.mapstruct.Mapper; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; import java.util.HashMap; +import java.util.Map; -@Mapper +@Component public class CustomerMapper { - Customer toDomain(CustomerEntity customerEntity) { + public Customer toDomain(CustomerEntity customerEntity) { final HashMap addresses = createAddressMap(customerEntity); return Customer.createCustomer( customerEntity.getId(), @@ -21,7 +23,35 @@ public class CustomerMapper { } - CustomerEntity toDbEntity(Customer customer) { + public CustomerEntity toDbEntity(Customer customer) { + return new CustomerEntity( + customer.getId(), + customer.getName(), + customer.getHashedPassword(), + customer.getBirthday(), + customer.isActive(), + getAddressAttribute(customer, Address.AddressType.DEFAULT, Address::getStreet), + getAddressAttribute(customer, Address.AddressType.DEFAULT, Address::getHouseNumber), + getAddressAttribute(customer, Address.AddressType.DEFAULT, Address::getZipCode), + getAddressAttribute(customer, Address.AddressType.DEFAULT, Address::getCountry), + getAddressAttribute(customer, Address.AddressType.SHIPPING, Address::getStreet), + getAddressAttribute(customer, Address.AddressType.SHIPPING, Address::getHouseNumber), + getAddressAttribute(customer, Address.AddressType.SHIPPING, Address::getZipCode), + getAddressAttribute(customer, Address.AddressType.SHIPPING, Address::getCountry), + getAddressAttribute(customer, Address.AddressType.BILLING, Address::getStreet), + getAddressAttribute(customer, Address.AddressType.BILLING, Address::getHouseNumber), + getAddressAttribute(customer, Address.AddressType.BILLING, Address::getZipCode), + getAddressAttribute(customer, Address.AddressType.BILLING, Address::getCountry)); + } + + private T getAddressAttribute(Customer customer, Address.AddressType type, Converter getter) { + final Map addresses = customer.getAddresses(); + if (addresses != null) { + final Address address = addresses.get(type); + if (address != null) { + return getter.convert(address); + } + } return null; } diff --git a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/model/CustomerEntity.java b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/model/CustomerEntity.java index 27f1ef8..64da4fd 100644 --- a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/model/CustomerEntity.java +++ b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/model/CustomerEntity.java @@ -5,6 +5,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; +import java.math.BigInteger; import java.time.LocalDate; @Data @@ -12,25 +13,25 @@ import java.time.LocalDate; @NoArgsConstructor public class CustomerEntity { @Id - private Integer id; + private BigInteger id; private String name; private String hashedPassword; private LocalDate birthday; private boolean active; private String street; - private int houseNumber; - private int zipCode; + private Integer houseNumber; + private Integer zipCode; private String country; private String shippingStreet; - private int shippingHouseNumber; - private int shippingZipCode; + private Integer shippingHouseNumber; + private Integer shippingZipCode; private String shippingCountry; private String billingStreet; - private int billingHouseNumber; - private int billingZipCode; + private Integer billingHouseNumber; + private Integer billingZipCode; private String billingCountry; } diff --git a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/repository/CustomerRepository.java b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/repository/CustomerRepository.java index 22d234f..7cca195 100644 --- a/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/repository/CustomerRepository.java +++ b/adapter/persistence/src/main/java/de/strasser/peter/hexagonal/persistence/repository/CustomerRepository.java @@ -4,6 +4,8 @@ import de.strasser.peter.hexagonal.persistence.model.CustomerEntity; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; +import java.math.BigInteger; + @Repository -public interface CustomerRepository extends MongoRepository { +public interface CustomerRepository extends MongoRepository { } diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/AddAddressController.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/AddAddressController.java index 7c0dacb..2f8f7af 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/AddAddressController.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/AddAddressController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.math.BigInteger; import java.util.List; @RestController @@ -20,7 +21,7 @@ public class AddAddressController { @PostMapping("/v1/address") - public void addAddress(@RequestParam Integer customerId, @RequestBody AddAddressRequest addAddressRequest) { + public void addAddress(@RequestParam BigInteger customerId, @RequestBody AddAddressRequest addAddressRequest) { final List addAddressCmds = List.of(addAddressMapper.toCmd(addAddressRequest)); addAddressUseCase.addAddresses(customerId, addAddressCmds); } diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/errors/ErrorHandling.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/errors/ErrorHandling.java new file mode 100644 index 0000000..b521da9 --- /dev/null +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/errors/ErrorHandling.java @@ -0,0 +1,45 @@ +package de.strasser.peter.hexagonal.webadapter.errors; + +import de.strasser.peter.hexagonal.application.customer.exception.BusinessException; +import lombok.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.ConstraintViolationException; +import java.time.LocalDateTime; + +@ControllerAdvice +public class ErrorHandling { + + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity constrainViolationException(HttpServletRequest req, ConstraintViolationException exc) { + return ErrorResponse.createErrorResp(req, HttpStatus.BAD_REQUEST, exc); + } + + @ExceptionHandler(BusinessException.class) + public ResponseEntity constrainViolationException(HttpServletRequest req, BusinessException exc) { + return ErrorResponse.createErrorResp(req, HttpStatus.BAD_REQUEST, exc); + } + + @Value + public static class ErrorResponse { + String timestamp; + Integer status; + String error; + String message; + String path; + + public static ResponseEntity createErrorResp(HttpServletRequest req, HttpStatus code, Exception e) { + final ErrorResponse errResponse = new ErrorResponse( + LocalDateTime.now().toString(), + code.value(), + e.getClass().getName(), + e.getMessage(), + req.getContextPath()); + return ResponseEntity.status(code).body(errResponse); + } + } +} diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/mapper/RegisterCustomerRequestMapper.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/mapper/RegisterCustomerRequestMapper.java index a7f31a7..afd2346 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/mapper/RegisterCustomerRequestMapper.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/mapper/RegisterCustomerRequestMapper.java @@ -3,8 +3,10 @@ package de.strasser.peter.hexagonal.webadapter.mapper; import de.strasser.peter.hexagonal.application.customer.port.in.commands.RegisterCustomerCommand; import de.strasser.peter.hexagonal.webadapter.model.RegisterCustomerRequest; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; @Mapper public interface RegisterCustomerRequestMapper { + @Mapping(source = "password", target = "clearPassword") RegisterCustomerCommand toCmd(RegisterCustomerRequest registerCustomerRequest); } diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/model/AddAddressRequest.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/model/AddAddressRequest.java index 2ef6405..d2c579a 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/model/AddAddressRequest.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/model/AddAddressRequest.java @@ -1,10 +1,10 @@ package de.strasser.peter.hexagonal.webadapter.model; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Value; -@Value +@Data @AllArgsConstructor @NoArgsConstructor(force = true) public class AddAddressRequest { diff --git a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/model/RegisterCustomerRequest.java b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/model/RegisterCustomerRequest.java index bd9478e..8e64f49 100644 --- a/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/model/RegisterCustomerRequest.java +++ b/adapter/web/src/main/java/de/strasser/peter/hexagonal/webadapter/model/RegisterCustomerRequest.java @@ -1,16 +1,16 @@ package de.strasser.peter.hexagonal.webadapter.model; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Value; import java.time.LocalDate; -@Value +@Data @AllArgsConstructor @NoArgsConstructor(force = true) public class RegisterCustomerRequest { String name; LocalDate birthDay; - String clearPassword; + String password; } diff --git a/application/pom.xml b/application/pom.xml index f4b5933..8b3ba02 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -13,7 +13,7 @@ application 0.0.1-SNAPSHOT application - Business logik for demo project + Business logic for demo project 14 1.3.1.Final 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/customer/domain/Address.java index 7cce868..b8a0ce1 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/customer/domain/Address.java @@ -6,8 +6,8 @@ import lombok.Value; @Value public class Address { String street; - int houseNumber; - int zipCode; + Integer houseNumber; + Integer zipCode; String country; 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/customer/domain/Customer.java index 31a004e..927ea05 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/customer/domain/Customer.java @@ -4,6 +4,7 @@ import de.strasser.peter.hexagonal.application.customer.exception.DefaultAdressR import de.strasser.peter.hexagonal.application.customer.exception.UserIsTooYoungExc; import lombok.Getter; +import java.math.BigInteger; import java.time.LocalDate; import java.time.Period; import java.util.HashMap; @@ -11,7 +12,7 @@ import java.util.Map; @Getter public class Customer { - private final Integer id; + private final BigInteger id; private String name; private String hashedPassword; private LocalDate birthday; @@ -19,7 +20,7 @@ public class Customer { private Map addresses; private boolean active; - private Customer(Integer id, String name, String hashedPassword, LocalDate birthDate, Map addresses, boolean active) { + private Customer(BigInteger id, String name, String hashedPassword, LocalDate birthDate, Map addresses, boolean active) { this.id = id; this.active = active; this.age = Period.between(birthDate, LocalDate.now()).getYears(); @@ -46,7 +47,7 @@ public class Customer { } public static Customer createCustomer( - Integer id, + BigInteger id, String name, String hashedPassword, LocalDate birthDate, 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/customer/exception/AddressTypeDoesNotExistsExc.java index e93f4b7..619bf75 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/customer/exception/AddressTypeDoesNotExistsExc.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.application.customer.exception; -public class AddressTypeDoesNotExistsExc extends IllegalArgumentException { +public class AddressTypeDoesNotExistsExc extends BusinessException { public AddressTypeDoesNotExistsExc(String type) { super(String.format("Adress of type '%s' does not exist!", 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/customer/exception/BusinessException.java new file mode 100644 index 0000000..4ef2bd1 --- /dev/null +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/BusinessException.java @@ -0,0 +1,7 @@ +package de.strasser.peter.hexagonal.application.customer.exception; + +public abstract class BusinessException extends IllegalStateException { + public BusinessException(String error) { + super(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/customer/exception/DefaultAdressRequiredToActivateExc.java index cbed471..3261c61 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/customer/exception/DefaultAdressRequiredToActivateExc.java @@ -1,6 +1,6 @@ package de.strasser.peter.hexagonal.application.customer.exception; -public class DefaultAdressRequiredToActivateExc extends IllegalStateException { +public class DefaultAdressRequiredToActivateExc extends BusinessException { public DefaultAdressRequiredToActivateExc() { super("Customer needs to have at least a default adress to be able to be activated!"); diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/UserIsTooYoungExc.java b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/UserIsTooYoungExc.java index 179bded..9265327 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/UserIsTooYoungExc.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/exception/UserIsTooYoungExc.java @@ -2,7 +2,7 @@ package de.strasser.peter.hexagonal.application.customer.exception; import java.text.MessageFormat; -public class UserIsTooYoungExc extends IllegalArgumentException { +public class UserIsTooYoungExc extends BusinessException { public UserIsTooYoungExc(int age) { super(MessageFormat.format("Customer is too young. Expected: > 18 yrs, Actual {0}", age)); } 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/customer/port/in/AddAddressUseCase.java index 7dc5773..04fc7f3 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/customer/port/in/AddAddressUseCase.java @@ -5,8 +5,9 @@ import de.strasser.peter.hexagonal.application.customer.port.in.commands.AddAddr import javax.validation.Valid; import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; +import java.math.BigInteger; import java.util.List; public interface AddAddressUseCase { - void addAddresses(@Min(0) Integer customerId, @Valid @NotEmpty List addresses); + void addAddresses(@Min(0) BigInteger customerId, @Valid @NotEmpty List addresses); } 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/customer/port/in/commands/AddAddressCommand.java index 3363a00..9681111 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/customer/port/in/commands/AddAddressCommand.java @@ -1,13 +1,13 @@ package de.strasser.peter.hexagonal.application.customer.port.in.commands; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Value; import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; -@Value +@Data @AllArgsConstructor @NoArgsConstructor(force = true) public class AddAddressCommand { 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/customer/port/in/commands/RegisterCustomerCommand.java index 548f6ad..3f2678b 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/customer/port/in/commands/RegisterCustomerCommand.java @@ -3,14 +3,14 @@ package de.strasser.peter.hexagonal.application.customer.port.in.commands; import de.strasser.peter.hexagonal.common.validators.SecurePassword; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Value; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Past; import java.time.LocalDate; -@Value +@Data @AllArgsConstructor @NoArgsConstructor(force = true) public class RegisterCustomerCommand { diff --git a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/LoadCustomerAdapter.java b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/LoadCustomerAdapter.java index 749ace2..4f350c2 100644 --- a/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/LoadCustomerAdapter.java +++ b/application/src/main/java/de/strasser/peter/hexagonal/application/customer/port/out/LoadCustomerAdapter.java @@ -2,6 +2,8 @@ package de.strasser.peter.hexagonal.application.customer.port.out; import de.strasser.peter.hexagonal.application.customer.domain.Customer; +import java.math.BigInteger; + public interface LoadCustomerAdapter { - Customer findById(Integer id); + Customer findById(BigInteger id); } 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/customer/port/out/commands/ValidateAddressCommand.java index 38ff4d9..e116865 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/customer/port/out/commands/ValidateAddressCommand.java @@ -1,15 +1,15 @@ package de.strasser.peter.hexagonal.application.customer.port.out.commands; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Value; -@Value +@Data @AllArgsConstructor @NoArgsConstructor(force = true) public class ValidateAddressCommand { String street; - int houseNumber; - int zipCode; + Integer houseNumber; + Integer zipCode; String country; } 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/customer/service/AddressService.java index f42d8fb..17890d0 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/customer/service/AddressService.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; import javax.validation.Valid; import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; +import java.math.BigInteger; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -27,7 +28,7 @@ class AddressService implements AddAddressUseCase { private final AddAddressMapper addAddressMapper; @Override - public void addAddresses(@Min(0) Integer customerId, @Valid @NotEmpty List addAddressCmds) { + public void addAddresses(@Min(0) BigInteger customerId, @Valid @NotEmpty List addAddressCmds) { final Customer customer = loadCustomerAdapter.findById(customerId); final Map addresses = new HashMap<>(); diff --git a/common/pom.xml b/common/pom.xml index ea245c4..269e2ac 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -21,10 +21,6 @@ org.springframework.boot spring-boot-starter - - org.springframework.boot - spring-boot-starter-security - org.springframework.boot spring-boot-starter-validation diff --git a/common/src/main/java/de/strasser/peter/hexagonal/common/validators/SecurePassword.java b/common/src/main/java/de/strasser/peter/hexagonal/common/validators/SecurePassword.java index cc7cc1c..6e3290c 100644 --- a/common/src/main/java/de/strasser/peter/hexagonal/common/validators/SecurePassword.java +++ b/common/src/main/java/de/strasser/peter/hexagonal/common/validators/SecurePassword.java @@ -21,7 +21,7 @@ public @interface SecurePassword { "# a digit must occur at least once\n" + "# a lower case letter must occur at least once\n" + "# an upper case letter must occur at least once\n" + - "# a special character must occur at least once\n" + + "# a special character must occur at least once ( one of !@#$%^&*(),.?\":{}|<>) \n" + "# no whitespace allowed in the entire string\n" + "# anything, at least eight places though"; @@ -33,7 +33,7 @@ public @interface SecurePassword { @Override public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { - return s.matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$"); + return s != null && s.matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*(),.?\":{}|<>])(?=\\S+$).{8,}$"); } } } diff --git a/config/src/main/resources/application.properties b/config/src/main/resources/application.properties index daa0eee..eb06b92 100644 --- a/config/src/main/resources/application.properties +++ b/config/src/main/resources/application.properties @@ -1 +1,2 @@ spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false +logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG