@malukenho Mh, It's not ideal, and at the cost of bending/leaking the interface/abstraction with implementation details concerns, but I feel `add` works great when you have a UoW under the hood. Otherwise `save` may be a more clear choice.
No permissions to add cert-manager, no access to DNS. I do wonder if I can do a combination of k8s jobs + ingress nginx's server snippets annotation with custom user agents to be able to automate LE cert renewals..
@webdevilopers@VaughnVernon@prooph_software I think prooph is a good implementation; when retrieving the event streams MetadataMatcher ( https://t.co/SpC0Po9KzU ) is used to filter out all the events that aren't the expected aggregate type ( specified as the FQCN of the class ). I'll probably do something similar, thanks!
What would you people do when the wrong event stream is used to rebuild a different aggregate? `Customer.fromEventStream(productEventStream)` /cc @webdevilopers
@VaughnVernon@webdevilopers Which brought me thinking that, if I had to implement/use an event store, having a reference to the aggregate as part of the stream name/id ( or using it as part of the query criteria when fetching the event stream ) may not be a bad idea
@VaughnVernon@webdevilopers Yeah, I do understand that's not meant as a way to handle this scenario, but it seems the only thing preventing users from retrieve an invalid Forum object if calling `ForumRepo.ofId(new ForumId('valid-duscussion-uuid'))`
@webdevilopers I did look at a few other implementations, like IDDD's event store impl of @VaughnVernon , and most of the time to avoid this issue you must relay on the aggregate throwing on unknow events, when applying them. Few libs just fall through tho.
@webdevilopers What I had in mind is that you may construct an aggregate that is invalid to begin with. If you pass an extraneous event stream and no events is apply to it, then you have a broken state machine, as it wasn't constructed correctly.
@nicolasgrekas Not sure if having a `static` type would be a good idea; A base class with that as return type may be a bit ambiguous because that's going to change based on the context, I.e, extending A technically also change the contract of A?