How Event Sourcing helps developers cut through software complexity.
application = state + behavior
onAuctionOfferPlaced(event) {
var placedOffer = Offer.unflatten(event.eventPayload.offer);
this._offers.push(placedOffer);
}
placeOffer(buyer, amount, date) {
var offer = new Offer(buyer, amount, date);
if (!this._opened) {
throw new Error('The auction is not open for offers at this time');
}
this._stageEvent(new Event('AuctionOfferPlaced', { offer }));
}
var Auction = require('../Entities/Auction');
module.exports = function openAuction(params) {
return repository.invoke(Auction, params.ID, function(instance) {
instance.placeOffer(params.buyer, params.amount, new Date());
});
};
event: {
eventType: 'AuctionOfferPlaced',
eventPayload: { offer: { ... } }
}, commit: {
sequenceID: '75525f22-381e-421b-8b9c-1f4623a32d56',
sequenceSlot: 4,
aggregateType: 'Auction'
}
Thanks!