Files
mixtape/zero.Core/Routing/RouteBulkRefresher.cs
T
2021-10-13 12:47:18 +02:00

66 lines
1.9 KiB
C#

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<IRouteProvider> Providers { get; set; }
public RouteBulkRefresher(IZeroDocumentSession session, IZeroStore store, IEnumerable<IRouteProvider> providers)
{
Session = session;
Store = store;
Providers = providers;
}
/// <inheritdoc />
public async Task RebuildAllRoutes()
{
int count = 0;
List<Application> apps = await Session.Core.Query<Application>().ToListAsync();
foreach (Application app in apps)
{
using IAsyncDocumentSession session = Store.OpenAsyncSession(app.Database);
session.Advanced.MaxNumberOfRequestsPerSession = 1000;
// delete all routes
//await Store.PurgeAsync<Route>(app.Database);
foreach (IRouteProvider provider in Providers)
{
// get all routes for this provider
IList<Route> routes = await provider.GetAllRoutes(session);
// delete all registered routes in the database for this provider
//await Store.PurgeAsync<Route>(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;
}
}
}
}
}
}
}