using Application.Services.Database; using MongoDB.Driver; namespace Infrastructure.Services.MongoDB; public class MongoDbService : IMongoDbService { private readonly IMongoDatabase _database; public MongoDbService(string connectionString) { var url = new MongoUrl(connectionString); var client = new MongoClient(url); _database = client.GetDatabase(url.DatabaseName); } public IMongoCollection GetCollection(string collectionName) { return _database.GetCollection(collectionName); } public async Task> FindAsync(string collectionName, List<(string FieldName, string Value)> criteria) { var collection = _database.GetCollection(collectionName); var filters = new List>(); foreach (var (FieldName, Value) in criteria) filters.Add(Builders.Filter.Eq(FieldName, Value)); var combinedFilter = Builders.Filter.And(filters); return await collection.Find(combinedFilter).ToListAsync(); } public async Task AddAsync(string collectionName, T document) { var collection = _database.GetCollection(collectionName); await collection.InsertOneAsync(document); } public async Task ModifyAsync(string collectionName, string keyField, string keyValue, T document) { var collection = _database.GetCollection(collectionName); var filter = Builders.Filter.Eq(keyField, keyValue); await collection.ReplaceOneAsync(filter, document, new ReplaceOptions { IsUpsert = true }); } public async Task DeleteAsync(string collectionName, string keyField, string keyValue) { var collection = _database.GetCollection(collectionName); var filter = Builders.Filter.Eq(keyField, keyValue); await collection.DeleteOneAsync(filter); } }