package be.swsb.fiazard.eventstore;
import be.swsb.fiazard.ddd.AggregateId;
import be.swsb.fiazard.ddd.DomainEvent;
import java.util.List;
import static be.swsb.fiazard.eventstore.EventTypeExtractor.extractEventTypeFrom;
public class EventStoreImpl implements EventStore {
private AtomPoster atomPoster;
public EventStoreImpl(AtomPoster atomPoster) {
this.atomPoster = atomPoster;
}
/**
* Before storing events, does OptimisticLocking on given version
*
* @param aggregateId The AggregateId to which all these events belong
* @param events The new, unsaved events
* @param version The version that the aggregate was in before the unsaved events were recorded.
*/
@Override
public void store(AggregateId aggregateId, List<DomainEvent> events, int version) {
//TODO sch3lp: validate aggregateId in events are all the same as passed aggregateId, or introduce param object
//TODO sch3lp: do optimistic locking here: given version needs to be same as max(events.version)?
events.stream().forEach((event)-> atomPoster.post(new AtomEvent(extractEventTypeFrom(event), event)));
}
@Override
public List<DomainEvent> getEventHistoryFor(AggregateId aggregateId) {
return null;
}
}