using System; using System.Threading.Tasks; using zero.Core.Entities; namespace zero.Core.Collections { public sealed class CollectionInterceptorShim : CollectionInterceptor where T : ZeroEntity { ICollectionInterceptor _base; public CollectionInterceptorShim(ICollectionInterceptor baseInterceptor) { _base = baseInterceptor; } TParams Args(Parameters args, Action modify = null) where TParams : CollectionInterceptor.Parameters, new() { TParams parameters = new TParams() { Context = args.Context, Properties = args.Properties, Session = args.Session, Store = args.Store, Collection = null, //args.Collection //Validator = args.Validator }; modify?.Invoke(parameters); return parameters; } TParams Args(ParametersWithModel args, Action modify = null) where TParams : CollectionInterceptor.ParametersWithModel, new() { TParams parameters = Args((Parameters)args, modify); parameters.Model = args.Model; return parameters; } InterceptorResult Result(InterceptorResult result) { return result == null ? null : new InterceptorResult() { InterceptorHash = result.InterceptorHash, Parameters = result.Parameters, Prevent = result.Prevent, Result = result.Result != null ? EntityResult.From(result.Result, result.Result.Model as T) : null }; } /// public override bool CanRun(Parameters args) { if (args is ParametersWithModel) { return _base.CanRun(Args.ParametersWithModel>(args as ParametersWithModel)); } return _base.CanRun(Args.Parameters>(args)); } /// public override async Task> Creating(CreateParameters args) => Result(await _base.Creating(Args.CreateParameters>(args))); /// public override async Task> Updating(UpdateParameters args) => Result(await _base.Updating(Args.UpdateParameters>(args, x => x.Id = args.Id))); /// public override async Task> Saving(SaveParameters args) => Result(await _base.Saving(Args.SaveParameters>(args, x => { x.Id = args.Id; x.IsUpdate = args.IsUpdate; }))); /// public override async Task> Deleting(DeleteParameters args) => Result(await _base.Deleting(Args.DeleteParameters>(args, x => x.Id = args.Id))); /// public override async Task> Purging(PurgeParameters args) => Result(await _base.Purging(Args.PurgeParameters>(args))); /// public override Task Created(CreateParameters args) => _base.Created(Args.CreateParameters>(args)); /// public override Task Updated(UpdateParameters args) => _base.Updated(Args.UpdateParameters>(args, x => x.Id = args.Id)); /// public override Task Saved(SaveParameters args) => _base.Saved(Args.SaveParameters>(args, x => { x.Id = args.Id; x.IsUpdate = args.IsUpdate; })); /// public override Task Deleted(DeleteParameters args) => _base.Deleted(Args.DeleteParameters>(args, x => x.Id = args.Id)); /// public override Task Purged(PurgeParameters args) => _base.Purged(Args.PurgeParameters>(args)); } }