2021-11-19 14:59:24 +01:00
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using Raven.Client.Documents;
|
|
|
|
|
using Raven.Client.Http;
|
|
|
|
|
|
2021-11-20 13:52:28 +01:00
|
|
|
namespace zero.Persistence;
|
2021-11-19 14:59:24 +01:00
|
|
|
|
|
|
|
|
internal class PersistenceModule : ZeroModule
|
|
|
|
|
{
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
public override void Register(IZeroModuleConfiguration config)
|
|
|
|
|
{
|
|
|
|
|
config.Services.AddSingleton<IZeroDocumentConventionsBuilder, ZeroDocumentConventionsBuilder>();
|
|
|
|
|
config.Services.AddSingleton<IZeroDocumentStore, ZeroDocumentStore>(CreateRavenStore);
|
|
|
|
|
config.Services.AddScoped<IZeroStore, ZeroStore>();
|
|
|
|
|
config.Services.AddScoped<IZeroTokenProvider, ZeroTokenProvider>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
public override void Configure(IZeroOptions options)
|
|
|
|
|
{
|
|
|
|
|
base.Configure(options);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Creates and configures the raven store
|
|
|
|
|
/// </summary>
|
|
|
|
|
protected ZeroDocumentStore CreateRavenStore(IServiceProvider services)
|
|
|
|
|
{
|
|
|
|
|
IZeroOptions options = services.GetService<IZeroOptions>();
|
|
|
|
|
IZeroDocumentConventionsBuilder conventionsBuilder = services.GetService<IZeroDocumentConventionsBuilder>();
|
|
|
|
|
|
|
|
|
|
IZeroDocumentStore store = new ZeroDocumentStore(options)
|
|
|
|
|
{
|
2021-11-22 14:29:22 +01:00
|
|
|
Urls = new string[1] { options.For<RavenOptions>().Url },
|
2021-11-19 14:59:24 +01:00
|
|
|
Conventions = // TODO activate and test this
|
|
|
|
|
{
|
|
|
|
|
AggressiveCache =
|
|
|
|
|
{
|
|
|
|
|
Duration = TimeSpan.FromHours(1),
|
|
|
|
|
Mode = AggressiveCacheMode.TrackChanges
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
conventionsBuilder.Run(store.Conventions);
|
|
|
|
|
|
|
|
|
|
IDocumentStore raven = store.Initialize();
|
|
|
|
|
|
|
|
|
|
// create all indexes
|
2021-11-22 14:29:22 +01:00
|
|
|
if (options.Initialized)
|
2021-11-19 14:59:24 +01:00
|
|
|
{
|
|
|
|
|
//var indexes = options.Raven.Indexes.BuildAll(options, store);
|
|
|
|
|
//IndexCreation.CreateIndexes(indexes, store, database: options.Raven.Database);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (ZeroDocumentStore)raven;
|
|
|
|
|
}
|
|
|
|
|
}
|