using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; using zero.Core.Entities; namespace zero.Core.Collections { public class InterceptorInstruction where T : ZeroEntity where TParameters : CollectionInterceptor.Parameters { public string Operation { get; set; } public TParameters Parameters { get; set; } public List> Results { get; set; } = new(); public EntityResult EntityResult { get; set; } public bool Return => EntityResult != null; internal Func, Task>>>, Task> BeforeOperationHandler = _ => Task.CompletedTask; internal Func, Task>>, Task> AfterOperationHandler = _ => Task.CompletedTask; internal InterceptorInstruction() { } internal InterceptorInstruction(TParameters parameters) { Parameters = parameters; } public async Task HandleBefore(Expression, Task>>> expression) { await BeforeOperationHandler(expression); } public async Task HandleAfter(Expression, Task>> expression) { await AfterOperationHandler(expression); } } }