Files
mixtape/zero.Core/Routing/RouteBulkRefresher.cs
T

64 lines
1.8 KiB
C#
Raw Normal View History

using Raven.Client.Documents;
using Raven.Client.Documents.BulkInsert;
using Raven.Client.Documents.Session;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using zero.Core.Database;
using zero.Core.Entities;
namespace zero.Core.Routing
{
public class RouteBulkRefresher
{
protected IZeroStore Store { get; set; }
2021-11-06 16:27:04 +01:00
protected IZeroContext Context { get; set; }
protected IEnumerable<IRouteProvider> Providers { get; set; }
2021-11-06 16:27:04 +01:00
public RouteBulkRefresher(IZeroStore store, IZeroContext context, IEnumerable<IRouteProvider> providers)
{
Store = store;
2021-11-06 16:27:04 +01:00
Context = context;
Providers = providers;
}
/// <inheritdoc />
2021-11-06 16:27:04 +01:00
public async Task<int> RebuildAllRoutes()
{
int count = 0;
2021-10-28 12:11:07 +02:00
List<Application> apps = await Store.Session(global: true).Query<Application>().ToListAsync();
foreach (Application app in apps)
{
2021-11-08 11:30:15 +01:00
using ZeroContextScope scope = Context.CreateScope(app);
using IZeroDocumentSession session = scope.Store.Session(scope.Database, ZeroSessionResolution.Create);
2021-11-06 16:27:04 +01:00
session.Advanced.MaxNumberOfRequestsPerSession = 100_000;
2021-11-08 11:30:15 +01:00
await scope.Store.Raven.PurgeAsync<Route>(scope.Database);
2021-11-06 16:27:04 +01:00
2021-11-08 11:30:15 +01:00
RoutingContext context = new(scope.Store, scope.Context, session);
foreach (IRouteProvider provider in Providers.OrderByDescending(x => x.Priority))
{
2021-11-08 11:30:15 +01:00
using BulkInsertOperation bulkInsert = scope.Store.Raven.BulkInsert(scope.Database);
2021-11-06 16:27:04 +01:00
await foreach (Route route in provider.Seed(context))
{
2021-11-06 16:27:04 +01:00
if (route != null)
{
2021-11-06 16:27:04 +01:00
route.ProviderAlias = provider.Alias;
await bulkInsert.StoreAsync(route, route.Id);
count += 1;
}
}
}
}
2021-11-06 16:27:04 +01:00
return count;
}
}
}