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 { public DocumentCollection AnnotatedUsers { get; set; } = null!; public DocumentCollection Orders { get; set; } = null!; public DocumentCollection TestDocuments { get; set; } = null!; public DocumentCollection OrderDocuments { get; set; } = null!; public DocumentCollection ComplexDocuments { get; set; } = null!; public DocumentCollection Users { get; set; } = null!; public DocumentCollection ComplexUsers { get; set; } = null!; public DocumentCollection AutoInitEntities { get; set; } = null!; public DocumentCollection People { get; set; } = null!; public DocumentCollection PeopleV2 { get; set; } = null!; public DocumentCollection Products { get; set; } = null!; public DocumentCollection IntEntities { get; set; } = null!; public DocumentCollection StringEntities { get; set; } = null!; public DocumentCollection GuidEntities { get; set; } = null!; public DocumentCollection CustomKeyEntities { get; set; } = null!; public DocumentCollection AsyncDocs { get; set; } = null!; public DocumentCollection SchemaUsers { get; set; } = null!; public DocumentCollection VectorItems { get; set; } = null!; public DocumentCollection GeoItems { get; set; } = null!; // Source Generator Feature Tests public DocumentCollection DerivedEntities { get; set; } = null!; public DocumentCollection ComputedPropertyEntities { get; set; } = null!; public DocumentCollection AdvancedCollectionEntities { get; set; } = null!; public DocumentCollection PrivateSetterEntities { get; set; } = null!; public DocumentCollection InitSetterEntities { get; set; } = null!; // Circular Reference Tests public DocumentCollection Employees { get; set; } = null!; public DocumentCollection CategoryRefs { get; set; } = null!; public DocumentCollection ProductRefs { get; set; } = null!; // Nullable String Id Test (UuidEntity scenario with inheritance) public DocumentCollection MockCounters { get; set; } = null!; // Temporal Types Test (DateTimeOffset, TimeSpan, DateOnly, TimeOnly) public DocumentCollection TemporalEntities { get; set; } = null!; public TestDbContext(string databasePath) : this(databasePath, PageFileConfig.Default, CompressionOptions.Default) { } public TestDbContext(string databasePath, CompressionOptions compressionOptions) : this(databasePath, PageFileConfig.Default, compressionOptions) { } public TestDbContext(string databasePath, PageFileConfig pageFileConfig) : this(databasePath, pageFileConfig, CompressionOptions.Default) { } 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); } public void ForceCheckpoint() { Engine.Checkpoint(); } public StorageEngine Storage => Engine; }