In our domain (insurance) we plan to have events for the lifecycle of quotes for a customer. The possible events could be:
QuoteStarted (Contains policy line: (motor/ household etc), customer id (e.g 1234)
QuoteSuspended (Contains Reason)
QuoteAbandoned (Contains Reason)
QuoteRated (Contains all rated risk detail)
QuoteBound (Contains rated chosen risk detail)
They might go into a stream by quote reference. Something like quote-000001. Then we might do a projection to ‘link-to’ all quotes for a customer into a stream like quotes-1234, so that we can subscribe to all quote events for customer 1234.
Now if we want to have a projection for an ‘open quotes’ view we might create an open quote line when QuoteStarted, change the line status on QuoteSuspended, remove it on QuoteAbandoned or QuoteBound.
My question is, for this kind of projection should we use the built in event store projections system? And if so should we output to a new stream or state (with an array for lines)? Or is this kind of thing better as a ‘traditional’ denormaliser in codebase projection that outputs to a SQL table, or even an in memory denormalisation of events?