using Raven.Client.Documents; using Raven.Client.Documents.BulkInsert; using Raven.Client.Documents.Session; using System.Collections.Generic; using System.Threading.Tasks; using zero.Core.Database; using zero.Core.Entities; namespace zero.Core.Routing { public class RouteBulkRefresher { protected IZeroDocumentSession Session { get; set; } protected IZeroStore Store { get; set; } protected IEnumerable Providers { get; set; } public RouteBulkRefresher(IZeroDocumentSession session, IZeroStore store, IEnumerable providers) { Session = session; Store = store; Providers = providers; } /// public async Task RebuildAllRoutes() { int count = 0; List apps = await Session.Core.Query().ToListAsync(); foreach (Application app in apps) { using IAsyncDocumentSession session = Store.OpenAsyncSession(app.Database); session.Advanced.MaxNumberOfRequestsPerSession = 1000; // delete all routes //await Store.PurgeAsync(app.Database); foreach (IRouteProvider provider in Providers) { // get all routes for this provider IList routes = await provider.GetAllRoutes(session); // delete all registered routes in the database for this provider //await Store.PurgeAsync(app.Database, $"where {nameof(Route.ProviderAlias)} = $alias", new Raven.Client.Parameters() //{ // { "alias", provider.Alias } //}); // store new routes using (BulkInsertOperation bulkInsert = Store.BulkInsert(app.Database)) { foreach (Route route in routes) { await bulkInsert.StoreAsync(route, route.Id); count += 1; } } } } } } }