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