Soft Deletes
Closed this issue · 0 comments
The builtin command to delete an aggregate deletes all events of an aggregate from the event store (useful to comply with GDPR). Normally, we don't want to actually delete events from the event store but instead publish an event that "marks" the aggregate as deleted and prevents it from being queryable without losing all the aggregate events.
Proposal
User-defined events may provide a SoftDelete() bool
method that the aggregate repository will use within a query or fetch to determine if an aggregate has been soft-deleted. Within a query, a soft-deleted aggregate is simply excluded from the query result. Within a fetch, a new repository.ErrDeleted
error will be returned. In order to revert the deletion (or "restore" the aggregate), events may provide a SoftRestore() bool
method that "restores" the aggregate to include it in query results and to re-allow to fetch the aggregate.