using MongoDB.Driver; using Microsoft.Extensions.Options; namespace SkyArtShop.Services { public class MongoDBSettings { public string ConnectionString { get; set; } = string.Empty; public string DatabaseName { get; set; } = string.Empty; public Dictionary Collections { get; set; } = new Dictionary(); } public class MongoDBService { private readonly IMongoDatabase _database; private readonly MongoDBSettings _settings; public MongoDBService(IOptions settings) { _settings = settings.Value; var client = new MongoClient(_settings.ConnectionString); _database = client.GetDatabase(_settings.DatabaseName); } public IMongoCollection GetCollection(string collectionName) { return _database.GetCollection(collectionName); } // Helper methods for common operations public async Task> GetAllAsync(string collectionName) { var collection = GetCollection(collectionName); return await collection.Find(_ => true).ToListAsync(); } public async Task GetByIdAsync(string collectionName, string id) { var collection = GetCollection(collectionName); var filter = Builders.Filter.Eq("_id", MongoDB.Bson.ObjectId.Parse(id)); return await collection.Find(filter).FirstOrDefaultAsync(); } public async Task InsertAsync(string collectionName, T document) { var collection = GetCollection(collectionName); await collection.InsertOneAsync(document); } public async Task UpdateAsync(string collectionName, string id, T document) { var collection = GetCollection(collectionName); var filter = Builders.Filter.Eq("_id", MongoDB.Bson.ObjectId.Parse(id)); await collection.ReplaceOneAsync(filter, document); } public async Task DeleteAsync(string collectionName, string id) { var collection = GetCollection(collectionName); var filter = Builders.Filter.Eq("_id", MongoDB.Bson.ObjectId.Parse(id)); await collection.DeleteOneAsync(filter); } } }