using MongoDB.Driver; using YandexGameServer.Models; using Tag = YandexGameServer.Models.Tag; namespace YandexGameServer.Services { public class DatabaseService { private readonly string _connectionString; private readonly string _databaseName; private readonly IMongoCollection _clientsCollection; private readonly IMongoCollection _tagsCollection; private readonly IMongoCollection _citiesCollection; public DatabaseService(IConfiguration configuration) { var databaseSection = configuration.GetSection("Database"); _connectionString = databaseSection["ConnectionString"]; _databaseName = databaseSection["DatabaseName"]; var mongoClient = new MongoClient(_connectionString); var database = mongoClient.GetDatabase(_databaseName); _clientsCollection = database.GetCollection("clients"); _tagsCollection = database.GetCollection("tags"); _citiesCollection = database.GetCollection("cities-codes"); } public async Task CreateAsync(T data) { if (data is Client) await _clientsCollection.InsertOneAsync(data as Client); else if (data is Tag) await _tagsCollection.InsertOneAsync(data as Tag); else if (data is CityUniqueCode) await _citiesCollection.InsertOneAsync(data as CityUniqueCode); else throw new NullReferenceException(); } public async Task?> GetClientsAsync() => await _clientsCollection.Find(_ => true).ToListAsync(); public async Task?> GetTagsAsync() => await _tagsCollection.Find(_ => true).ToListAsync(); public async Task?> GetCitiesCodesAsync() => await _citiesCollection.Find(_ => true).ToListAsync(); public async Task UpdateAsync(T data) { if (data is Client) { Client client = data as Client; _clientsCollection.ReplaceOne(x => x.id == client.id, client); } else if (data is Tag) { Tag tag = data as Tag; _tagsCollection.ReplaceOne(x => x.id == tag.id, tag); } else if (data is CityUniqueCode) { CityUniqueCode cityCode = data as CityUniqueCode; _citiesCollection.ReplaceOne(x => x.id == cityCode.id, cityCode); } } } }