using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Options; using MongoDB.Bson; using MongoDB.Driver; namespace SkyArtShop.Services; public class MongoDBService { private readonly IMongoDatabase _database; private readonly MongoDBSettings _settings; public MongoDBService(IOptions settings) { _settings = settings.Value; MongoClientSettings mongoClientSettings = MongoClientSettings.FromConnectionString(_settings.ConnectionString); mongoClientSettings.MaxConnectionPoolSize = 500; mongoClientSettings.MinConnectionPoolSize = 50; mongoClientSettings.WaitQueueTimeout = TimeSpan.FromSeconds(30.0); mongoClientSettings.ServerSelectionTimeout = TimeSpan.FromSeconds(10.0); mongoClientSettings.ConnectTimeout = TimeSpan.FromSeconds(10.0); mongoClientSettings.SocketTimeout = TimeSpan.FromSeconds(60.0); MongoClient mongoClient = new MongoClient(mongoClientSettings); _database = mongoClient.GetDatabase(_settings.DatabaseName); } public IMongoCollection GetCollection(string collectionName) { return _database.GetCollection(collectionName); } public async Task> GetAllAsync(string collectionName) { IMongoCollection collection = GetCollection(collectionName); return await collection.Find((T _) => true).ToListAsync(); } public async Task GetByIdAsync(string collectionName, string id) { IMongoCollection collection = GetCollection(collectionName); FilterDefinition filter = Builders.Filter.Eq("_id", ObjectId.Parse(id)); return await collection.Find(filter).FirstOrDefaultAsync(); } public async Task InsertAsync(string collectionName, T document) { IMongoCollection collection = GetCollection(collectionName); await collection.InsertOneAsync(document); } public async Task UpdateAsync(string collectionName, string id, T document) { IMongoCollection collection = GetCollection(collectionName); FilterDefinition filter = Builders.Filter.Eq("_id", ObjectId.Parse(id)); await collection.ReplaceOneAsync(filter, document); } public async Task DeleteAsync(string collectionName, string id) { IMongoCollection collection = GetCollection(collectionName); FilterDefinition filter = Builders.Filter.Eq("_id", ObjectId.Parse(id)); await collection.DeleteOneAsync(filter); } }