first working state.

Customer can be registered and be written into the db
This commit is contained in:
Peter Straßer
2021-04-11 14:09:18 +02:00
parent 90eef66c5b
commit c1460d2ae2
26 changed files with 180 additions and 45 deletions

View File

@@ -6,8 +6,8 @@ import lombok.Value;
@Value
public class Address {
String street;
int houseNumber;
int zipCode;
Integer houseNumber;
Integer zipCode;
String country;

View File

@@ -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<Address.AddressType, Address> addresses;
private boolean active;
private Customer(Integer id, String name, String hashedPassword, LocalDate birthDate, Map<Address.AddressType, Address> addresses, boolean active) {
private Customer(BigInteger id, String name, String hashedPassword, LocalDate birthDate, Map<Address.AddressType, Address> 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,

View File

@@ -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));
}

View File

@@ -0,0 +1,7 @@
package de.strasser.peter.hexagonal.application.customer.exception;
public abstract class BusinessException extends IllegalStateException {
public BusinessException(String error) {
super(error);
}
}

View File

@@ -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!");

View File

@@ -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));
}

View File

@@ -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<AddAddressCommand> addresses);
void addAddresses(@Min(0) BigInteger customerId, @Valid @NotEmpty List<AddAddressCommand> addresses);
}

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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<AddAddressCommand> addAddressCmds) {
public void addAddresses(@Min(0) BigInteger customerId, @Valid @NotEmpty List<AddAddressCommand> addAddressCmds) {
final Customer customer = loadCustomerAdapter.findById(customerId);
final Map<Address.AddressType, Address> addresses = new HashMap<>();