From 46eb41d76d298973a65f51e09ca2b636e0f555b1 Mon Sep 17 00:00:00 2001 From: Dunestorm Date: Wed, 1 Jul 2020 19:01:55 +0100 Subject: [PATCH] Functional MongoDB CRUD --- FireLance/DatabaseConnection.cs | 43 ++++++++++++++++++++++++++++--- FireLance/Models/SaveDataModel.cs | 11 ++++++-- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/FireLance/DatabaseConnection.cs b/FireLance/DatabaseConnection.cs index f838576..64775e6 100644 --- a/FireLance/DatabaseConnection.cs +++ b/FireLance/DatabaseConnection.cs @@ -1,11 +1,14 @@ using FireLance.Interfaces; +using MongoDB.Bson; using MongoDB.Driver; +using System; +using System.Collections.Generic; namespace FireLance { public class DatabaseConnection : IDatabaseConnection { - IMongoDatabase mongoDatabase; + IMongoDatabase db; public void CloseCurrentConnection() { @@ -16,7 +19,7 @@ namespace FireLance { int connectionCnt = 0; - try { connectionCnt = mongoDatabase.Client.ListDatabases().ToList().Count; } + try { connectionCnt = db.Client.ListDatabases().ToList().Count; } catch {} return (connectionCnt > 0) ? true : false; @@ -25,13 +28,45 @@ namespace FireLance public void OpenConnection(string dbLocation, int port) { var client = new MongoClient($"mongodb://{dbLocation}:{port}"); - mongoDatabase = client.GetDatabase(dbLocation); + var settings = new MongoDatabaseSettings { GuidRepresentation = GuidRepresentation.Standard }; + + db = client.GetDatabase(dbLocation, settings); } public void InsertRecord(string table, T record) { - var collection = mongoDatabase.GetCollection(table); + var collection = db.GetCollection(table); collection.InsertOne(record); } + + public void UpsertRecord(string table, Guid id, T record) + { + var collection = db.GetCollection(table); + collection.ReplaceOne( + new BsonDocument("_id", id), + record, + new ReplaceOptions { IsUpsert = true }); + } + + public List LoadRecords(string table) + { + var collection = db.GetCollection(table); + return collection.Find(new BsonDocument()).ToList(); + } + + public T LoadRecordById(string table, Guid id) + { + var collection = db.GetCollection(table); + var filter = Builders.Filter.Eq("Id", id); + + return collection.Find(filter).First(); + } + + public void DeleteRecordById(string table, Guid id) + { + var collection = db.GetCollection(table); + var filter = Builders.Filter.Eq("Id", id); + collection.DeleteOne(filter); + } } } diff --git a/FireLance/Models/SaveDataModel.cs b/FireLance/Models/SaveDataModel.cs index f8b331d..4f0b098 100644 --- a/FireLance/Models/SaveDataModel.cs +++ b/FireLance/Models/SaveDataModel.cs @@ -1,9 +1,15 @@ -using System; +using MongoDB.Bson; +using MongoDB.Bson.Serialization.Attributes; +using System; +using System.Collections.Generic; -namespace FireLance.Model +namespace FireLance.Models { public class SaveDataModel { + [BsonId] + public Guid Id { get; set; } + public int GameID { get; set; } public string SHA256Hash { get; set; } public string Description { get; set; } @@ -12,3 +18,4 @@ namespace FireLance.Model public uint BackupSize { get; set; } } } +