Events that arrive in unknown order

Hellow fellow elixirers,

I recently discovered commanded library. I wanted to try it and I got to situation with process manager. I have situation in which domain event happened when there are two attributes of User model written (I get writes as events). Problem is that I get events for full User update, or for direct writes to fields, so my approach was:

  1. aggregate that check full user write, have full user in state and then compare if any of that fields changed, if yes, emit event
  2. aggregate for first attribute
  3. aggregate for second attribute
  4. aggregate that detects that both events (commands) happened

My plan was to have process manager that would in listen for events from first three aggregates and generate commands for fourth, and then turn off.

Problem is that, how I would say to process_manager to first get started if any of two events happened and then just to continue on other, does mean that if I just use continue in both cases and process manager don’t exists it gets started, or that if I use start in both cases that it will continue if exists, or, is mi approach completely wrong and I have broken some rules of CQRS/EventSourcing pattern? Thank you in advance :slight_smile:

Using either :start or :continue for a process manager in Commanded has the behaviour of “start or continue”.

It’s only if you use :start! or :continue! that validation is applied to ensure the process being started is new, or a continued process exists. See Strict process routing for more detail.