using ZB.MOM.WW.CBDD.Bson;
using ZB.MOM.WW.CBDD.Core;
using ZB.MOM.WW.CBDD.Core.Collections;
using ZB.MOM.WW.CBDD.Core.Compression;
using ZB.MOM.WW.CBDD.Core.Indexing;
using ZB.MOM.WW.CBDD.Core.Metadata;
using ZB.MOM.WW.CBDD.Core.Storage;
namespace ZB.MOM.WW.CBDD.Shared;
///
/// Test context with manual collection initialization
/// (Source Generator will automate this in the future)
///
public partial class TestDbContext : DocumentDbContext
{
///
/// Gets or sets the AnnotatedUsers.
///
public DocumentCollection AnnotatedUsers { get; set; } = null!;
///
/// Gets or sets the Orders.
///
public DocumentCollection Orders { get; set; } = null!;
///
/// Gets or sets the TestDocuments.
///
public DocumentCollection TestDocuments { get; set; } = null!;
///
/// Gets or sets the OrderDocuments.
///
public DocumentCollection OrderDocuments { get; set; } = null!;
///
/// Gets or sets the ComplexDocuments.
///
public DocumentCollection ComplexDocuments { get; set; } = null!;
///
/// Gets or sets the Users.
///
public DocumentCollection Users { get; set; } = null!;
///
/// Gets or sets the ComplexUsers.
///
public DocumentCollection ComplexUsers { get; set; } = null!;
///
/// Gets or sets the AutoInitEntities.
///
public DocumentCollection AutoInitEntities { get; set; } = null!;
///
/// Gets or sets the People.
///
public DocumentCollection People { get; set; } = null!;
///
/// Gets or sets the PeopleV2.
///
public DocumentCollection PeopleV2 { get; set; } = null!;
///
/// Gets or sets the Products.
///
public DocumentCollection Products { get; set; } = null!;
///
/// Gets or sets the IntEntities.
///
public DocumentCollection IntEntities { get; set; } = null!;
///
/// Gets or sets the StringEntities.
///
public DocumentCollection StringEntities { get; set; } = null!;
///
/// Gets or sets the GuidEntities.
///
public DocumentCollection GuidEntities { get; set; } = null!;
///
/// Gets or sets the CustomKeyEntities.
///
public DocumentCollection CustomKeyEntities { get; set; } = null!;
///
/// Gets or sets the AsyncDocs.
///
public DocumentCollection AsyncDocs { get; set; } = null!;
///
/// Gets or sets the SchemaUsers.
///
public DocumentCollection SchemaUsers { get; set; } = null!;
///
/// Gets or sets the VectorItems.
///
public DocumentCollection VectorItems { get; set; } = null!;
///
/// Gets or sets the GeoItems.
///
public DocumentCollection GeoItems { get; set; } = null!;
// Source Generator Feature Tests
///
/// Gets or sets the DerivedEntities.
///
public DocumentCollection DerivedEntities { get; set; } = null!;
///
/// Gets or sets the ComputedPropertyEntities.
///
public DocumentCollection ComputedPropertyEntities { get; set; } = null!;
///
/// Gets or sets the AdvancedCollectionEntities.
///
public DocumentCollection AdvancedCollectionEntities { get; set; } = null!;
///
/// Gets or sets the PrivateSetterEntities.
///
public DocumentCollection PrivateSetterEntities { get; set; } = null!;
///
/// Gets or sets the InitSetterEntities.
///
public DocumentCollection InitSetterEntities { get; set; } = null!;
// Circular Reference Tests
///
/// Gets or sets the Employees.
///
public DocumentCollection Employees { get; set; } = null!;
///
/// Gets or sets the CategoryRefs.
///
public DocumentCollection CategoryRefs { get; set; } = null!;
///
/// Gets or sets the ProductRefs.
///
public DocumentCollection ProductRefs { get; set; } = null!;
// Nullable String Id Test (UuidEntity scenario with inheritance)
///
/// Gets or sets the MockCounters.
///
public DocumentCollection MockCounters { get; set; } = null!;
// Temporal Types Test (DateTimeOffset, TimeSpan, DateOnly, TimeOnly)
///
/// Gets or sets the TemporalEntities.
///
public DocumentCollection TemporalEntities { get; set; } = null!;
///
/// Initializes a new instance of the class.
///
/// The database path.
public TestDbContext(string databasePath)
: this(databasePath, PageFileConfig.Default, CompressionOptions.Default)
{
}
///
/// Initializes a new instance of the class.
///
/// The database path.
/// The compression options.
public TestDbContext(string databasePath, CompressionOptions compressionOptions)
: this(databasePath, PageFileConfig.Default, compressionOptions)
{
}
///
/// Initializes a new instance of the class.
///
/// The database path.
/// The page file configuration.
public TestDbContext(string databasePath, PageFileConfig pageFileConfig)
: this(databasePath, pageFileConfig, CompressionOptions.Default)
{
}
///
/// Initializes a new instance of the class.
///
/// The database path.
/// The page file configuration.
/// The compression options.
/// The maintenance options.
public TestDbContext(
string databasePath,
PageFileConfig pageFileConfig,
CompressionOptions? compressionOptions,
MaintenanceOptions? maintenanceOptions = null)
: base(databasePath, pageFileConfig, compressionOptions, maintenanceOptions)
{
}
///
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity();
modelBuilder.Entity().ToCollection("users");
modelBuilder.Entity().ToCollection("complex_users");
modelBuilder.Entity().ToCollection("auto_init_entities");
modelBuilder.Entity().ToCollection("people_collection").HasIndex(p => p.Age);
modelBuilder.Entity().ToCollection("peoplev2_collection").HasIndex(p => p.Age);
modelBuilder.Entity().ToCollection("products_collection").HasIndex(p => p.Price);
modelBuilder.Entity().HasKey(e => e.Id);
modelBuilder.Entity().HasKey(e => e.Id);
modelBuilder.Entity().HasKey(e => e.Id);
modelBuilder.Entity().HasKey(e => e.Code);
modelBuilder.Entity().ToCollection("async_docs");
modelBuilder.Entity().ToCollection("schema_users").HasKey(e => e.Id);
modelBuilder.Entity();
modelBuilder.Entity();
modelBuilder.Entity();
modelBuilder.Entity()
.ToCollection("vector_items")
.HasVectorIndex(x => x.Embedding, dimensions: 3, metric: VectorMetric.L2, name: "idx_vector");
modelBuilder.Entity()
.ToCollection("geo_items")
.HasSpatialIndex(x => x.Location, name: "idx_spatial");
modelBuilder.Entity()
.HasKey(x => x.Id)
.HasConversion();
// Source Generator Feature Tests
modelBuilder.Entity().ToCollection("derived_entities");
modelBuilder.Entity().ToCollection("computed_property_entities");
modelBuilder.Entity().ToCollection("advanced_collection_entities");
modelBuilder.Entity().ToCollection("private_setter_entities");
modelBuilder.Entity().ToCollection("init_setter_entities");
// Circular Reference Tests
modelBuilder.Entity().ToCollection("employees");
modelBuilder.Entity().ToCollection("category_refs");
modelBuilder.Entity().ToCollection("product_refs");
// Nullable String Id Test (UuidEntity scenario)
modelBuilder.Entity().ToCollection("mock_counters").HasKey(e => e.Id);
// Temporal Types Test
modelBuilder.Entity().ToCollection("temporal_entities").HasKey(e => e.Id);
}
///
/// Executes ForceCheckpoint.
///
public void ForceCheckpoint()
{
Engine.Checkpoint();
}
///
/// Gets or sets the Storage.
///
public StorageEngine Storage => Engine;
}