using System.Threading.Tasks; using zero.Core.Entities; namespace zero.Core.Collections { public abstract partial class CollectionInterceptor : ICollectionInterceptor where T : ZeroEntity { /// public virtual bool CanRun(Parameters args) => true; /// public virtual Task> Creating(CreateParameters args) => Task.FromResult>(default); /// public virtual Task> Updating(UpdateParameters args) => Task.FromResult>(default); /// public virtual Task> Saving(SaveParameters args) => Task.FromResult>(default); /// public virtual Task> Deleting(DeleteParameters args) => Task.FromResult>(default); /// public virtual Task> Purging(PurgeParameters args) => Task.FromResult>(default); /// public virtual Task Created(CreateParameters args) => Task.CompletedTask; /// public virtual Task Updated(UpdateParameters args) => Task.CompletedTask; /// public virtual Task Saved(SaveParameters args) => Task.CompletedTask; /// public virtual Task Deleted(DeleteParameters args) => Task.CompletedTask; /// public virtual Task Purged(PurgeParameters args) => Task.CompletedTask; } public abstract partial class CollectionInterceptor : CollectionInterceptor, ICollectionInterceptor { /// public override bool CanRun(Parameters args) => base.CanRun(args); } public interface ICollectionInterceptor : ICollectionInterceptor { } public interface ICollectionInterceptor where T : ZeroEntity { /// /// Whether any of the interceptor methods is allowed to run based on the parameters /// bool CanRun(CollectionInterceptor.Parameters args); /// /// Called after an entity has been stored but before the session has saved its changes /// Task Created(CollectionInterceptor.CreateParameters args); /// /// Called before an entity is stored and validated /// Task> Creating(CollectionInterceptor.CreateParameters args); /// /// Called after an entity has been deleted but before the session has saved its changes /// Task Deleted(CollectionInterceptor.DeleteParameters args); /// /// Called before an entity is deleted /// Task> Deleting(CollectionInterceptor.DeleteParameters args); /// /// Called after the document collection has been purged /// Task Purged(CollectionInterceptor.PurgeParameters args); /// /// Called before a collection is purged /// Task> Purging(CollectionInterceptor.PurgeParameters args); /// /// Called after an entity has been updated but before the session has saved its changes /// Task Updated(CollectionInterceptor.UpdateParameters args); /// /// Called before an entity is stored and validated /// Task> Updating(CollectionInterceptor.UpdateParameters args); /// /// Called after an entity has been saved (created or updated) but before the session has saved its changes /// Task Saved(CollectionInterceptor.SaveParameters args); /// /// Called before an entity is stored and validated /// Task> Saving(CollectionInterceptor.SaveParameters args); } }