using Microsoft.Extensions.Logging; using Raven.Client; using Raven.Client.Documents; using Raven.Client.Documents.Linq; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using zero.Core.Database; using zero.Core.Database.Indexes; using zero.Core.Entities; namespace zero.Core.Routing { public class RouteChangeHandler : Routes, IRouteChangeHandler { public RouteChangeHandler(IZeroContext context, IZeroStore store, ILogger logger, IEnumerable providers) : base(context, store, logger, providers) { } public async Task OnEntityDelete(T model) where T : IZeroRouteEntity { RoutingContext context = GetContext(); await RemoveDependencies(context, model); } /// /// Removes dependent routes of an entity /// protected virtual async Task RemoveDependencies(RoutingContext context, T model) where T : IZeroRouteEntity { await context.Store.Raven.PurgeAsync(context.Context.Application.Database, $"where c.Dependencies IN ($id)", new Parameters() { { "id", model.Id } }); } //protected async Task> GetDependencies(RoutingContext context, T model) where T : IZeroRouteEntity //{ // return await context.Session.Query().Where(x => model.Id.In(x.Dependencies)).ToListAsync(); //} } public interface IRouteChangeHandler { } }