using Microsoft.Extensions.DependencyInjection;
using Raven.Client.Documents;
using Raven.Client.Http;
namespace zero.Persistence;
internal class PersistenceModule : ZeroModule
{
///
public override void Register(IZeroModuleConfiguration config)
{
config.Services.AddSingleton();
config.Services.AddSingleton(CreateRavenStore);
config.Services.AddScoped();
config.Services.AddScoped();
}
///
public override void Configure(IZeroOptions options)
{
base.Configure(options);
}
///
/// Creates and configures the raven store
///
protected ZeroDocumentStore CreateRavenStore(IServiceProvider services)
{
IZeroOptions options = services.GetService();
IZeroDocumentConventionsBuilder conventionsBuilder = services.GetService();
IZeroDocumentStore store = new ZeroDocumentStore(options)
{
Urls = new string[1] { options.For().Url },
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
if (options.Initialized)
{
//var indexes = options.Raven.Indexes.BuildAll(options, store);
//IndexCreation.CreateIndexes(indexes, store, database: options.Raven.Database);
}
return (ZeroDocumentStore)raven;
}
}