package be.swsb.fiazard.ordering.orderplacement;
import static com.google.common.base.Preconditions.checkArgument;
import static org.apache.commons.lang.StringUtils.isNotBlank;
import be.swsb.fiazard.ddd.AbstractAggregate;
import be.swsb.fiazard.ddd.Aggregate;
import be.swsb.fiazard.ddd.AggregateId;
import be.swsb.fiazard.ddd.DomainEvent;
import com.google.common.collect.Lists;
class Order extends AbstractAggregate implements Aggregate {
private String customerName;
Order(AggregateId aggregateId, String customerName) {
super(Lists.newArrayList());
checkArgument(isNotBlank(customerName));
recordNewEvent(new NewOrderPlacedEvent(aggregateId, getNextEventVersion(), customerName));
}
@Override
protected void registerEventReplayStrategies() {
registerSingleEventReplayStrategy(NewOrderPlacedEvent.class, this::initialize);
}
private void initialize(DomainEvent event) {
NewOrderPlacedEvent newOrderPlacedEvent = (NewOrderPlacedEvent) event;
setAggregateId(newOrderPlacedEvent.getAggregateId());
this.customerName = newOrderPlacedEvent.getCustomerName();
}
String getCustomerName() {
return customerName;
}
}