Files
2023-07-08 21:28:08 +05:00

62 lines
2.5 KiB
C#

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<Client> _clientsCollection;
private readonly IMongoCollection<Tag> _tagsCollection;
private readonly IMongoCollection<CityUniqueCode> _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<Client>("clients");
_tagsCollection = database.GetCollection<Tag>("tags");
_citiesCollection = database.GetCollection<CityUniqueCode>("cities-codes");
}
public async Task CreateAsync<T>(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<List<Client>?> GetClientsAsync() => await _clientsCollection.Find(_ => true).ToListAsync();
public async Task<List<Tag>?> GetTagsAsync() => await _tagsCollection.Find(_ => true).ToListAsync();
public async Task<List<CityUniqueCode>?> GetCitiesCodesAsync() => await _citiesCollection.Find(_ => true).ToListAsync();
public async Task UpdateAsync<T>(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);
}
}
}
}