From 7f8a42d8dba9fbd46d928967e6bf2e9e79103ef3 Mon Sep 17 00:00:00 2001 From: Artyom_Yashin Date: Tue, 23 Apr 2024 13:10:31 +0400 Subject: [PATCH] =?UTF-8?q?=D0=90=D1=80=D0=B1=D0=B0=D0=B9=D1=82=D0=B5?= =?UTF-8?q?=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BarberShop/BarberShop.sln | 10 +- .../BarberShopMongoDBImplement.csproj | 20 ++++ .../BarberShopMongoDatabase.cs | 21 ++++ .../clientStorage.cs | 109 ++++++++++++++++++ 4 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 BarberShop/BarberShopMongoDBImplement/BarberShopMongoDBImplement.csproj create mode 100644 BarberShop/BarberShopMongoDBImplement/BarberShopMongoDatabase.cs create mode 100644 BarberShop/BarberShopMongoDBImplement/clientStorage.cs diff --git a/BarberShop/BarberShop.sln b/BarberShop/BarberShop.sln index 134e04a..fa59bf4 100644 --- a/BarberShop/BarberShop.sln +++ b/BarberShop/BarberShop.sln @@ -9,9 +9,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BarberShopContracts", "Barb EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BarberShopBusinessLogic", "BarberShopBusinessLogic\BarberShopBusinessLogic.csproj", "{0BA98D0D-1658-4553-8A5E-B1B0D70E57F8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BarberShopDatabaseImplement", "BarberShopDatabaseImplement\BarberShopDatabaseImplement.csproj", "{DC52AF5A-EB87-450B-830B-FFB687A7C648}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BarberShopDatabaseImplement", "BarberShopDatabaseImplement\BarberShopDatabaseImplement.csproj", "{DC52AF5A-EB87-450B-830B-FFB687A7C648}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BarberShop", "BarberShop\BarberShop.csproj", "{2B918C3D-6A78-41FE-866C-6C884E0A0C5E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BarberShop", "BarberShop\BarberShop.csproj", "{2B918C3D-6A78-41FE-866C-6C884E0A0C5E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BarberShopMongoDBImplement", "BarberShopMongoDBImplement\BarberShopMongoDBImplement.csproj", "{5294E6AD-6F62-4954-BECD-6CA058047D5C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -39,6 +41,10 @@ Global {2B918C3D-6A78-41FE-866C-6C884E0A0C5E}.Debug|Any CPU.Build.0 = Debug|Any CPU {2B918C3D-6A78-41FE-866C-6C884E0A0C5E}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B918C3D-6A78-41FE-866C-6C884E0A0C5E}.Release|Any CPU.Build.0 = Release|Any CPU + {5294E6AD-6F62-4954-BECD-6CA058047D5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5294E6AD-6F62-4954-BECD-6CA058047D5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5294E6AD-6F62-4954-BECD-6CA058047D5C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5294E6AD-6F62-4954-BECD-6CA058047D5C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/BarberShop/BarberShopMongoDBImplement/BarberShopMongoDBImplement.csproj b/BarberShop/BarberShopMongoDBImplement/BarberShopMongoDBImplement.csproj new file mode 100644 index 0000000..fb99f0f --- /dev/null +++ b/BarberShop/BarberShopMongoDBImplement/BarberShopMongoDBImplement.csproj @@ -0,0 +1,20 @@ + + + + net6.0-windows + enable + true + enable + + + + + + + + + + + + + diff --git a/BarberShop/BarberShopMongoDBImplement/BarberShopMongoDatabase.cs b/BarberShop/BarberShopMongoDBImplement/BarberShopMongoDatabase.cs new file mode 100644 index 0000000..2a725d3 --- /dev/null +++ b/BarberShop/BarberShopMongoDBImplement/BarberShopMongoDatabase.cs @@ -0,0 +1,21 @@ +using MongoDB.Driver; + +namespace BarberShopMongoDBImplement +{ + public class BarberShopMongoDatabase + { + public static BarberShopMongoDatabase? instance; + public MongoClient client; + private BarberShopMongoDatabase() + { client = new MongoClient("mongodb://localhost:27017"); } + + public static BarberShopMongoDatabase getInstance() + { + if (instance == null) + { + instance = new BarberShopMongoDatabase(); + } + return instance; + } + } +} \ No newline at end of file diff --git a/BarberShop/BarberShopMongoDBImplement/clientStorage.cs b/BarberShop/BarberShopMongoDBImplement/clientStorage.cs new file mode 100644 index 0000000..ad545aa --- /dev/null +++ b/BarberShop/BarberShopMongoDBImplement/clientStorage.cs @@ -0,0 +1,109 @@ +using BarberShopContracts.BindingModels; +using BarberShopContracts.SearchModels; +using BarberShopContracts.StorageContracts; +using BarberShopContracts.ViewModels; +using BarberShopDatabaseImplement.Models; +using MongoDB.Driver; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BarberShopMongoDBImplement +{ + public class clientStorage : IClientStorage + { + readonly IMongoCollection _collection; + public MongoClient context; + + public clientStorage() + { + context = BarberShopMongoDatabase.getInstance().client; + _collection = context.GetDatabase("Lab7").GetCollection("client"); + } + + public List GetFullList() + { + var client = _collection.Find(_ => true) + .ToList() + .Select(a => a.GetViewModel) + .ToList(); + + return client; + + } + + public List GetFilteredList(ClientSearchModel model) + { + var filter = Builders.Filter.Empty; + + if (model.Id.HasValue) + { + filter &= Builders.Filter.Eq(a => a.Id, model.Id.Value); + } + else + { + return new List(); + } + + var answers = _collection.Find(filter) + .ToList() + .Select(a => a.GetViewModel) + .ToList(); + + return answers; + + } + + public ClientViewModel? GetElement(ClientSearchModel model) + { + if (!model.Id.HasValue) + return null; + var client = _collection.Find(x => x.Id == model.Id.Value).FirstOrDefault(); + if (client == null) + return null; + return client.GetViewModel; + } + + public ClientViewModel? Insert(ClientBindingModel model) + { + var client = Client.Create(model); + + if (client == null) + { + return null; + } + _collection.InsertOne(client); + + return client.GetViewModel; + + } + + public ClientViewModel? Update(ClientBindingModel model) + { + var filter = Builders.Filter.Eq(a => a.Id, model.Id); + var athlete = _collection.Find(filter).FirstOrDefault(); + + athlete.Update(model); + _collection.ReplaceOne(filter, athlete); + + return athlete.GetViewModel; + + } + + public ClientViewModel? Delete(ClientBindingModel model) + { + var filter = Builders.Filter.Eq(a => a.Id, model.Id); + var client = _collection.FindOneAndDelete(filter); + + if (client == null) + { + return null; + } + + return client.GetViewModel; + } + + } +}