I\'m struggling to get my head around what should happen when rebuilding the model by replaying events from the EventStore, in particular when events may trigger other events t
Events chaining can be very tricky and easily run out of control, so I'd avoid it as much as possible. For example in the scenario you're describing I'd raise a UserPromotedEvent
(maybe even using the PromoteUserCommand
), however I wouldn't consider actual/physical sending of an email as part of my domain. Instead I would create additional handler/denormalizer for UserPromotedEvent
that would register the need of sending the email with some additional checks quite possibly. After that another process would gather information of not yet processed emails and send them. This approach would mitigate the problems that might occur with not fully accessible/scalable email gateway.
In more general - the need of events chaining very often indicates that you should consider implementing a Saga for the process.