using Modules.Library.Domain.Entities; using Modules.Library.Domain.Entities.Genre; using Modules.Library.Domain.Entities.Language; using Modules.Library.Domain.Entities.MediaContent.CommonProperties; using Modules.Library.Domain.Entities.MediaContent.Items.Anime; using Modules.Library.Domain.EntityBuilders; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Conventions; using MongoDB.Bson.Serialization.IdGenerators; using MongoDB.Driver; using System.Linq.Expressions; using System.Reflection; namespace Modules.Library.Database.Database; public class MongoDbContext(IMongoDatabase database) { private bool _initialized; public IMongoCollection GetCollection(string collectionName) { if (!_initialized) throw new Exception(string.Concat(nameof(MongoDbContext), " has not initialized yet")); return database.GetCollection(collectionName); } public IMongoCollection Genres => GetCollection(nameof(Genre)); public IMongoCollection Languages => GetCollection(nameof(Language)); public IMongoCollection MediaInfos => GetCollection(nameof(MediaInfo)); private const string _mediaContentItemsCollectionName = "MediaContentItems"; public IMongoCollection AnimeTitles => GetCollection(_mediaContentItemsCollectionName); public void Initialize() { BsonClassMap.RegisterClassMap(q => { //q.AutoMap(); q.MapCreator(q => AnimeTitleBuilder.FromAnimeTitle(q).Build()); //q.MapIdMember(c => c.Id).SetIdGenerator(StringObjectIdGenerator.Instance); }); _initialized = true; } //private IntSequence _paymentProviderIdSequence = new("PaymentProviderId"); //public Task GetNextPaymentProviderId() => _paymentProviderIdSequence.GetNextSequenceValue(context); }