From 7bbc1aa768b3cf4829b79198b46a11b25f1c5676 Mon Sep 17 00:00:00 2001 From: Yourdax Date: Sun, 19 May 2024 02:55:53 +0400 Subject: [PATCH] +Contracts and BusinessLogics --- StorageCompany/StorageCompany.sln | 12 ++ .../BusinessLogics/ClientLogic.cs | 116 ++++++++++++++++++ .../BusinessLogics/ProductLogic.cs | 116 ++++++++++++++++++ .../BusinessLogics/ProviderLogic.cs | 102 +++++++++++++++ .../BusinessLogics/SaleLogic.cs | 102 +++++++++++++++ .../BusinessLogics/SupplyLogic.cs | 102 +++++++++++++++ .../StorageCompanyBusinessLogics.csproj | 18 +++ .../BindingModels/ClientBindingModel.cs | 12 ++ .../BindingModels/ProductBindingModel.cs | 13 ++ .../BindingModels/ProviderBindingModel.cs | 12 ++ .../BindingModels/SaleBindingModel.cs | 12 ++ .../BindingModels/SupplyBindingModel.cs | 12 ++ .../BusinessLogicsContracts/IClientLogic.cs | 15 +++ .../BusinessLogicsContracts/IProductLogic.cs | 16 +++ .../BusinessLogicsContracts/IProviderLogic.cs | 15 +++ .../BusinessLogicsContracts/ISaleLogic.cs | 15 +++ .../BusinessLogicsContracts/ISupplyLogic.cs | 15 +++ .../SearchModels/ClientSearchModel.cs | 10 ++ .../SearchModels/ProductSearchModel.cs | 8 ++ .../SearchModels/ProviderSearchModel.cs | 10 ++ .../SearchModels/SaleSearchModel.cs | 9 ++ .../SearchModels/SupplySearchModel.cs | 9 ++ .../StorageCompanyContracts.csproj | 13 ++ .../StoragesContracts/IClientStorage.cs | 16 +++ .../StoragesContracts/IProductStorage.cs | 16 +++ .../StoragesContracts/IProviderStorage.cs | 16 +++ .../StoragesContracts/ISaleStorage.cs | 16 +++ .../StoragesContracts/ISupplyStorage.cs | 16 +++ .../ViewModels/ClientViewModel.cs | 16 +++ .../ViewModels/ProductViewModel.cs | 17 +++ .../ViewModels/ProviderViewModel.cs | 16 +++ .../ViewModels/SaleViewModel.cs | 18 +++ .../ViewModels/SupplyViewModel.cs | 18 +++ 33 files changed, 929 insertions(+) create mode 100644 StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ClientLogic.cs create mode 100644 StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ProductLogic.cs create mode 100644 StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ProviderLogic.cs create mode 100644 StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/SaleLogic.cs create mode 100644 StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/SupplyLogic.cs create mode 100644 StorageCompany/StorageCompanyBusinessLogics/StorageCompanyBusinessLogics.csproj create mode 100644 StorageCompany/StorageCompanyContracts/BindingModels/ClientBindingModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/BindingModels/ProductBindingModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/BindingModels/ProviderBindingModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/BindingModels/SaleBindingModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/BindingModels/SupplyBindingModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IClientLogic.cs create mode 100644 StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IProductLogic.cs create mode 100644 StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IProviderLogic.cs create mode 100644 StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/ISaleLogic.cs create mode 100644 StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/ISupplyLogic.cs create mode 100644 StorageCompany/StorageCompanyContracts/SearchModels/ClientSearchModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/SearchModels/ProductSearchModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/SearchModels/ProviderSearchModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/SearchModels/SaleSearchModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/SearchModels/SupplySearchModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/StorageCompanyContracts.csproj create mode 100644 StorageCompany/StorageCompanyContracts/StoragesContracts/IClientStorage.cs create mode 100644 StorageCompany/StorageCompanyContracts/StoragesContracts/IProductStorage.cs create mode 100644 StorageCompany/StorageCompanyContracts/StoragesContracts/IProviderStorage.cs create mode 100644 StorageCompany/StorageCompanyContracts/StoragesContracts/ISaleStorage.cs create mode 100644 StorageCompany/StorageCompanyContracts/StoragesContracts/ISupplyStorage.cs create mode 100644 StorageCompany/StorageCompanyContracts/ViewModels/ClientViewModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/ViewModels/ProductViewModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/ViewModels/ProviderViewModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/ViewModels/SaleViewModel.cs create mode 100644 StorageCompany/StorageCompanyContracts/ViewModels/SupplyViewModel.cs diff --git a/StorageCompany/StorageCompany.sln b/StorageCompany/StorageCompany.sln index d83fa7a..727f8c1 100644 --- a/StorageCompany/StorageCompany.sln +++ b/StorageCompany/StorageCompany.sln @@ -7,6 +7,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StorageCompanyView", "Stora EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StorageCompanyDataModels", "StorageCompanyDataModels\StorageCompanyDataModels.csproj", "{8A256C21-D0A8-4A6B-A670-BA359B8E8A88}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StorageCompanyBusinessLogics", "StorageCompanyBusinessLogics\StorageCompanyBusinessLogics.csproj", "{AA209E1A-12E0-4401-942D-3A78B8A4AB79}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StorageCompanyContracts", "StorageCompanyContracts\StorageCompanyContracts.csproj", "{AC578537-AFF1-4816-94DB-D7029C439634}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +25,14 @@ Global {8A256C21-D0A8-4A6B-A670-BA359B8E8A88}.Debug|Any CPU.Build.0 = Debug|Any CPU {8A256C21-D0A8-4A6B-A670-BA359B8E8A88}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A256C21-D0A8-4A6B-A670-BA359B8E8A88}.Release|Any CPU.Build.0 = Release|Any CPU + {AA209E1A-12E0-4401-942D-3A78B8A4AB79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA209E1A-12E0-4401-942D-3A78B8A4AB79}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA209E1A-12E0-4401-942D-3A78B8A4AB79}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA209E1A-12E0-4401-942D-3A78B8A4AB79}.Release|Any CPU.Build.0 = Release|Any CPU + {AC578537-AFF1-4816-94DB-D7029C439634}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC578537-AFF1-4816-94DB-D7029C439634}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC578537-AFF1-4816-94DB-D7029C439634}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC578537-AFF1-4816-94DB-D7029C439634}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ClientLogic.cs b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ClientLogic.cs new file mode 100644 index 0000000..4e03bab --- /dev/null +++ b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ClientLogic.cs @@ -0,0 +1,116 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.BusinessLogicsContracts; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.StoragesContracts; +using StorageCompanyContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace StorageCompanyBusinessLogics.BusinessLogics +{ + public class ClientLogic : IClientLogic + { + private readonly ILogger _logger; + private readonly IClientStorage _clientStorage; + public ClientLogic(ILogger logger, IClientStorage clientStorage) + { + _logger = logger; + _clientStorage = clientStorage; + } + + public bool Create(ClientBindingModel model) + { + CheckModel(model); + if (_clientStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(ClientBindingModel model) + { + CheckModel(model); + if (_clientStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(ClientBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_clientStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public ClientViewModel? ReadElement(ClientSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Email:{Email}.Id:{ Id}", model.Email, model.Id); + var element = _clientStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + + public List? ReadList(ClientSearchModel? model) + { + _logger.LogInformation("ReadList. Email:{Email}.Id:{ Id} ", model?.Email, model?.Id); + var list = (model == null) ? _clientStorage.GetFullList() : _clientStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + private void CheckModel(ClientBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ClientFIO)) + { + throw new ArgumentNullException("Нет ФИО клиента", nameof(model.ClientFIO)); + } + if (string.IsNullOrEmpty(model.Email)) + { + throw new ArgumentNullException("Нет логина(почты) клиента", nameof(model.Email)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет пароля клиента", nameof(model.Password)); + } + _logger.LogInformation("Client. Id: {Id}, FIO: {fio}, email: {email}", model.Id, model.ClientFIO, model.Email); + var element = _clientStorage.GetElement(new ClientSearchModel + { + Email = model.Email, + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Клиент с таким логином(почтой) уже есть"); + } + } + } +} diff --git a/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ProductLogic.cs b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ProductLogic.cs new file mode 100644 index 0000000..b40258b --- /dev/null +++ b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ProductLogic.cs @@ -0,0 +1,116 @@ +using Microsoft.Extensions.Logging; +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.BusinessLogicsContracts; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.StoragesContracts; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyBusinessLogics.BusinessLogics +{ + public class ProductLogic : IProductLogic + { + private readonly ILogger _logger; + private readonly IProductStorage _productStorage; + public ProductLogic(ILogger logger, IProductStorage productStorage) + { + _logger = logger; + _productStorage = productStorage; + } + public bool Create(ProductBindingModel model) + { + CheckModel(model); + if (_productStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(ProductBindingModel model) + { + CheckModel(model); + if (_productStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(ProductBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_productStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public bool ChangeNum(ProductBindingModel model, int num) + { + CheckModel(model); + ProductBindingModel newModel = new ProductBindingModel() + { + Id = model.Id, + ProductName = model.ProductName, + ProductType = model.ProductType, + ProductNum = model.ProductNum + num, + }; + if (_productStorage.Update(newModel) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public ProductViewModel? ReadElement(ProductSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{ Id}. ProductName:{ ProductName} ", model.Id, model.ProductName); + var element = _productStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + public List? ReadList(ProductSearchModel? model) + { + _logger.LogInformation("ReadList. Id:{ Id}. ProductName:{ ProductName} ", model?.Id, model?.ProductName); + var list = (model == null) ? _productStorage.GetFullList() : _productStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + private void CheckModel(ProductBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ProductName)) + { + throw new ArgumentNullException("Нет названия продукта", nameof(model.ProductName)); + } + if (model.ProductNum < 0) + { + throw new ArgumentNullException("Количество элементов должно быть больше 0", nameof(model.ProductNum)); + } + } + } +} diff --git a/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ProviderLogic.cs b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ProviderLogic.cs new file mode 100644 index 0000000..1929dba --- /dev/null +++ b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/ProviderLogic.cs @@ -0,0 +1,102 @@ +using Microsoft.Extensions.Logging; +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.BusinessLogicsContracts; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.StoragesContracts; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyBusinessLogics.BusinessLogics +{ + public class ProviderLogic :IProviderLogic + { + private readonly ILogger _logger; + private readonly IProviderStorage _providerStorage; + public ProviderLogic(ILogger logger, IProviderStorage providerStorage) + { + _logger = logger; + _providerStorage = providerStorage; + } + public bool Create(ProviderBindingModel model) + { + CheckModel(model); + if (_providerStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(ProviderBindingModel model) + { + CheckModel(model); + if (_providerStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(ProviderBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_providerStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + public ProviderViewModel? ReadElement(ProviderSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{ Id}. ProviderFIO:{ ProviderFIO} ", model.Id, model.ProviderFIO); + var element = _providerStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + public List? ReadList(ProviderSearchModel? model) + { + _logger.LogInformation("ReadList. Id:{ Id}. ProviderFIO:{ ProviderFIO} ", model?.Id, model?.ProviderFIO); + var list = (model == null) ? _providerStorage.GetFullList() : _providerStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + private void CheckModel(ProviderBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ProviderFIO)) + { + throw new ArgumentNullException("Нет ФИО поставщика", nameof(model.ProviderFIO)); + } + if (string.IsNullOrEmpty(model.Email)) + { + throw new ArgumentNullException("Нет email", nameof(model.Email)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет пароля", nameof(model.Password)); + } + } + } +} diff --git a/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/SaleLogic.cs b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/SaleLogic.cs new file mode 100644 index 0000000..2b91484 --- /dev/null +++ b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/SaleLogic.cs @@ -0,0 +1,102 @@ +using Microsoft.Extensions.Logging; +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.BusinessLogicsContracts; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.StoragesContracts; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyBusinessLogics.BusinessLogics +{ + public class SaleLogic : ISaleLogic + { + private readonly ILogger _logger; + private readonly ISaleStorage _saleStorage; + public SaleLogic(ILogger logger, ISaleStorage saleStorage) + { + _logger = logger; + _saleStorage = saleStorage; + } + public bool Create(SaleBindingModel model) + { + CheckModel(model); + if (_saleStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(SaleBindingModel model) + { + CheckModel(model); + if (_saleStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(SaleBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_saleStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + public SaleViewModel? ReadElement(SaleSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{ Id} ", model.Id); + var element = _saleStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + public List? ReadList(SaleSearchModel? model) + { + _logger.LogInformation("ReadList. Id:{ Id} ", model?.Id); + var list = (model == null) ? _saleStorage.GetFullList() : _saleStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + private void CheckModel(SaleBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.ClientId <= 0) + { + throw new ArgumentNullException("Нет клиента", nameof(model.ClientId)); + } + if (model.ProductId <= 0) + { + throw new ArgumentNullException("Нет продукта", nameof(model.ProductId)); + } + if (model.SaleNum <= 0) + { + throw new ArgumentNullException("Количество элементов должно быть больше 0", nameof(model.SaleNum)); + } + } + } +} diff --git a/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/SupplyLogic.cs b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/SupplyLogic.cs new file mode 100644 index 0000000..5d44b98 --- /dev/null +++ b/StorageCompany/StorageCompanyBusinessLogics/BusinessLogics/SupplyLogic.cs @@ -0,0 +1,102 @@ +using Microsoft.Extensions.Logging; +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.BusinessLogicsContracts; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.StoragesContracts; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyBusinessLogics.BusinessLogics +{ + public class SupplyLogic : ISupplyLogic + { + private readonly ILogger _logger; + private readonly ISupplyStorage _supplyStorage; + public SupplyLogic(ILogger logger, ISupplyStorage supplyStorage) + { + _logger = logger; + _supplyStorage = supplyStorage; + } + public bool Create(SupplyBindingModel model) + { + CheckModel(model); + if (_supplyStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(SupplyBindingModel model) + { + CheckModel(model); + if (_supplyStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(SupplyBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_supplyStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + public SupplyViewModel? ReadElement(SupplySearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{ Id} ", model.Id); + var element = _supplyStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + public List? ReadList(SupplySearchModel? model) + { + _logger.LogInformation("ReadList. Id:{ Id} ", model?.Id); + var list = (model == null) ? _supplyStorage.GetFullList() : _supplyStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + private void CheckModel(SupplyBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.ProviderId <= 0) + { + throw new ArgumentNullException("Нет поставщика", nameof(model.ProviderId)); + } + if (model.ProductId <= 0) + { + throw new ArgumentNullException("Нет продукта", nameof(model.ProductId)); + } + if (model.SupplyNum <= 0) + { + throw new ArgumentNullException("Количество элементов должно быть больше 0", nameof(model.SupplyNum)); + } + } + } +} diff --git a/StorageCompany/StorageCompanyBusinessLogics/StorageCompanyBusinessLogics.csproj b/StorageCompany/StorageCompanyBusinessLogics/StorageCompanyBusinessLogics.csproj new file mode 100644 index 0000000..7bab1af --- /dev/null +++ b/StorageCompany/StorageCompanyBusinessLogics/StorageCompanyBusinessLogics.csproj @@ -0,0 +1,18 @@ + + + + net6.0 + enable + enable + + + + + + + + + + + + diff --git a/StorageCompany/StorageCompanyContracts/BindingModels/ClientBindingModel.cs b/StorageCompany/StorageCompanyContracts/BindingModels/ClientBindingModel.cs new file mode 100644 index 0000000..093fffb --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BindingModels/ClientBindingModel.cs @@ -0,0 +1,12 @@ +using StorageCompanyDataModels.Models; + +namespace StorageCompanyContracts.BindingModels +{ + public class ClientBindingModel : IClientModel + { + public int Id { get; set; } + public string ClientFIO { get; set; } = string.Empty; + public string Email { get; set; } = string.Empty; + public string Password { get; set; } = string.Empty; + } +} diff --git a/StorageCompany/StorageCompanyContracts/BindingModels/ProductBindingModel.cs b/StorageCompany/StorageCompanyContracts/BindingModels/ProductBindingModel.cs new file mode 100644 index 0000000..87deaf0 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BindingModels/ProductBindingModel.cs @@ -0,0 +1,13 @@ +using StorageCompanyDataModels.Enums; +using StorageCompanyDataModels.Models; + +namespace StorageCompanyContracts.BindingModels +{ + public class ProductBindingModel : IProductModel + { + public int Id { get; set; } + public string ProductName { get; set; } = string.Empty; + public int ProductNum { get; set; } + public ProductType ProductType { get; set; } = ProductType.Неизвестен; + } +} diff --git a/StorageCompany/StorageCompanyContracts/BindingModels/ProviderBindingModel.cs b/StorageCompany/StorageCompanyContracts/BindingModels/ProviderBindingModel.cs new file mode 100644 index 0000000..d0f173d --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BindingModels/ProviderBindingModel.cs @@ -0,0 +1,12 @@ +using StorageCompanyDataModels.Models; + +namespace StorageCompanyContracts.BindingModels +{ + public class ProviderBindingModel : IProviderModel + { + public int Id { get; set; } + public string ProviderFIO { get; set; } = string.Empty; + public string Email { get; set; } = string.Empty; + public string Password { get; set; } = string.Empty; + } +} diff --git a/StorageCompany/StorageCompanyContracts/BindingModels/SaleBindingModel.cs b/StorageCompany/StorageCompanyContracts/BindingModels/SaleBindingModel.cs new file mode 100644 index 0000000..0cb7334 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BindingModels/SaleBindingModel.cs @@ -0,0 +1,12 @@ +using StorageCompanyDataModels.Models; + +namespace StorageCompanyContracts.BindingModels +{ + public class SaleBindingModel : ISaleModel + { + public int Id { get; set; } + public int ClientId { get; set; } + public int ProductId { get; set; } + public int SaleNum { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/BindingModels/SupplyBindingModel.cs b/StorageCompany/StorageCompanyContracts/BindingModels/SupplyBindingModel.cs new file mode 100644 index 0000000..8adb770 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BindingModels/SupplyBindingModel.cs @@ -0,0 +1,12 @@ +using StorageCompanyDataModels.Models; + +namespace StorageCompanyContracts.BindingModels +{ + public class SupplyBindingModel : ISupplyModel + { + public int Id { get; set; } + public int ProviderId { get; set; } + public int ProductId { get; set; } + public int SupplyNum { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IClientLogic.cs b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IClientLogic.cs new file mode 100644 index 0000000..8900c35 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IClientLogic.cs @@ -0,0 +1,15 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.BusinessLogicsContracts +{ + public interface IClientLogic + { + List? ReadList(ClientSearchModel? model); + ClientViewModel? ReadElement(ClientSearchModel model); + bool Create(ClientBindingModel model); + bool Update(ClientBindingModel model); + bool Delete(ClientBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IProductLogic.cs b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IProductLogic.cs new file mode 100644 index 0000000..f0d8007 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IProductLogic.cs @@ -0,0 +1,16 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.BusinessLogicsContracts +{ + public interface IProductLogic + { + List? ReadList(ProductSearchModel? model); + ProductViewModel? ReadElement(ProductSearchModel model); + bool Create(ProductBindingModel model); + bool Update(ProductBindingModel model); + bool Delete(ProductBindingModel model); + bool ChangeNum(ProductBindingModel model, int num); + } +} diff --git a/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IProviderLogic.cs b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IProviderLogic.cs new file mode 100644 index 0000000..4bc21d4 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/IProviderLogic.cs @@ -0,0 +1,15 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.BusinessLogicsContracts +{ + public interface IProviderLogic + { + List? ReadList(ProviderSearchModel? model); + ProviderViewModel? ReadElement(ProviderSearchModel model); + bool Create(ProviderBindingModel model); + bool Update(ProviderBindingModel model); + bool Delete(ProviderBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/ISaleLogic.cs b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/ISaleLogic.cs new file mode 100644 index 0000000..dbf5911 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/ISaleLogic.cs @@ -0,0 +1,15 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.BusinessLogicsContracts +{ + public interface ISaleLogic + { + List? ReadList(SaleSearchModel? model); + SaleViewModel? ReadElement(SaleSearchModel model); + bool Create(SaleBindingModel model); + bool Update(SaleBindingModel model); + bool Delete(SaleBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/ISupplyLogic.cs b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/ISupplyLogic.cs new file mode 100644 index 0000000..6c7041f --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/BusinessLogicsContracts/ISupplyLogic.cs @@ -0,0 +1,15 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.BusinessLogicsContracts +{ + public interface ISupplyLogic + { + List? ReadList(SupplySearchModel? model); + SupplyViewModel? ReadElement(SupplySearchModel model); + bool Create(SupplyBindingModel model); + bool Update(SupplyBindingModel model); + bool Delete(SupplyBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/SearchModels/ClientSearchModel.cs b/StorageCompany/StorageCompanyContracts/SearchModels/ClientSearchModel.cs new file mode 100644 index 0000000..1487e86 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/SearchModels/ClientSearchModel.cs @@ -0,0 +1,10 @@ +namespace StorageCompanyContracts.SearchModels +{ + public class ClientSearchModel + { + public int? Id { get; set; } + public string? ClientFIO { get; set; } + public string? Email { get; set; } + public string? Password { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/SearchModels/ProductSearchModel.cs b/StorageCompany/StorageCompanyContracts/SearchModels/ProductSearchModel.cs new file mode 100644 index 0000000..a5ed531 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/SearchModels/ProductSearchModel.cs @@ -0,0 +1,8 @@ +namespace StorageCompanyContracts.SearchModels +{ + public class ProductSearchModel + { + public int? Id { get; set; } + public string? ProductName { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/SearchModels/ProviderSearchModel.cs b/StorageCompany/StorageCompanyContracts/SearchModels/ProviderSearchModel.cs new file mode 100644 index 0000000..091891d --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/SearchModels/ProviderSearchModel.cs @@ -0,0 +1,10 @@ +namespace StorageCompanyContracts.SearchModels +{ + public class ProviderSearchModel + { + public int? Id { get; set; } + public string? ProviderFIO { get; set; } + public string? Email { get; set; } + public string? Password { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/SearchModels/SaleSearchModel.cs b/StorageCompany/StorageCompanyContracts/SearchModels/SaleSearchModel.cs new file mode 100644 index 0000000..04f1f41 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/SearchModels/SaleSearchModel.cs @@ -0,0 +1,9 @@ +namespace StorageCompanyContracts.SearchModels +{ + public class SaleSearchModel + { + public int? Id { get; set; } + public int? ClientId { get; set; } + public int? ProductId { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/SearchModels/SupplySearchModel.cs b/StorageCompany/StorageCompanyContracts/SearchModels/SupplySearchModel.cs new file mode 100644 index 0000000..49d71a1 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/SearchModels/SupplySearchModel.cs @@ -0,0 +1,9 @@ +namespace StorageCompanyContracts.SearchModels +{ + public class SupplySearchModel + { + public int? Id { get; set; } + public int? ProviderId { get; set; } + public int? ProductId { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/StorageCompanyContracts.csproj b/StorageCompany/StorageCompanyContracts/StorageCompanyContracts.csproj new file mode 100644 index 0000000..bffcfe2 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/StorageCompanyContracts.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/StorageCompany/StorageCompanyContracts/StoragesContracts/IClientStorage.cs b/StorageCompany/StorageCompanyContracts/StoragesContracts/IClientStorage.cs new file mode 100644 index 0000000..79bfd88 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/StoragesContracts/IClientStorage.cs @@ -0,0 +1,16 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.StoragesContracts +{ + public interface IClientStorage + { + List GetFullList(); + List GetFilteredList(ClientSearchModel model); + ClientViewModel? GetElement(ClientSearchModel model); + ClientViewModel? Insert(ClientBindingModel model); + ClientViewModel? Update(ClientBindingModel model); + ClientViewModel? Delete(ClientBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/StoragesContracts/IProductStorage.cs b/StorageCompany/StorageCompanyContracts/StoragesContracts/IProductStorage.cs new file mode 100644 index 0000000..6e34b4b --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/StoragesContracts/IProductStorage.cs @@ -0,0 +1,16 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.StoragesContracts +{ + public interface IProductStorage + { + List GetFullList(); + List GetFilteredList(ProductSearchModel model); + ProductViewModel? GetElement(ProductSearchModel model); + ProductViewModel? Insert(ProductBindingModel model); + ProductViewModel? Update(ProductBindingModel model); + ProductViewModel? Delete(ProductBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/StoragesContracts/IProviderStorage.cs b/StorageCompany/StorageCompanyContracts/StoragesContracts/IProviderStorage.cs new file mode 100644 index 0000000..a1d973d --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/StoragesContracts/IProviderStorage.cs @@ -0,0 +1,16 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.StoragesContracts +{ + public interface IProviderStorage + { + List GetFullList(); + List GetFilteredList(ProviderSearchModel model); + ProviderViewModel? GetElement(ProviderSearchModel model); + ProviderViewModel? Insert(ProviderBindingModel model); + ProviderViewModel? Update(ProviderBindingModel model); + ProviderViewModel? Delete(ProviderBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/StoragesContracts/ISaleStorage.cs b/StorageCompany/StorageCompanyContracts/StoragesContracts/ISaleStorage.cs new file mode 100644 index 0000000..134a300 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/StoragesContracts/ISaleStorage.cs @@ -0,0 +1,16 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.StoragesContracts +{ + public interface ISaleStorage + { + List GetFullList(); + List GetFilteredList(SaleSearchModel model); + SaleViewModel? GetElement(SaleSearchModel model); + SaleViewModel? Insert(SaleBindingModel model); + SaleViewModel? Update(SaleBindingModel model); + SaleViewModel? Delete(SaleBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/StoragesContracts/ISupplyStorage.cs b/StorageCompany/StorageCompanyContracts/StoragesContracts/ISupplyStorage.cs new file mode 100644 index 0000000..c2a78f2 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/StoragesContracts/ISupplyStorage.cs @@ -0,0 +1,16 @@ +using StorageCompanyContracts.BindingModels; +using StorageCompanyContracts.SearchModels; +using StorageCompanyContracts.ViewModels; + +namespace StorageCompanyContracts.StoragesContracts +{ + public interface ISupplyStorage + { + List GetFullList(); + List GetFilteredList(SupplySearchModel model); + SupplyViewModel? GetElement(SupplySearchModel model); + SupplyViewModel? Insert(SupplyBindingModel model); + SupplyViewModel? Update(SupplyBindingModel model); + SupplyViewModel? Delete(SupplyBindingModel model); + } +} diff --git a/StorageCompany/StorageCompanyContracts/ViewModels/ClientViewModel.cs b/StorageCompany/StorageCompanyContracts/ViewModels/ClientViewModel.cs new file mode 100644 index 0000000..3bc86ad --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/ViewModels/ClientViewModel.cs @@ -0,0 +1,16 @@ +using StorageCompanyDataModels.Models; +using System.ComponentModel; + +namespace StorageCompanyContracts.ViewModels +{ + public class ClientViewModel : IClientModel + { + public int Id { get; set; } + [DisplayName("Client's FIO")] + public string ClientFIO { get; set; } = string.Empty; + [DisplayName("Login (Email)")] + public string Email { get; set; } = string.Empty; + [DisplayName("Password")] + public string Password { get; set; } = string.Empty; + } +} diff --git a/StorageCompany/StorageCompanyContracts/ViewModels/ProductViewModel.cs b/StorageCompany/StorageCompanyContracts/ViewModels/ProductViewModel.cs new file mode 100644 index 0000000..7d1b713 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/ViewModels/ProductViewModel.cs @@ -0,0 +1,17 @@ +using StorageCompanyDataModels.Enums; +using StorageCompanyDataModels.Models; +using System.ComponentModel; + +namespace StorageCompanyContracts.ViewModels +{ + public class ProductViewModel : IProductModel + { + public int Id { get; set; } + [DisplayName("Product Name")] + public string ProductName { get; set; } = string.Empty; + [DisplayName("Type Product")] + public ProductType ProductType { get; set; } = ProductType.Неизвестен; + [DisplayName("Num")] + public int ProductNum { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/ViewModels/ProviderViewModel.cs b/StorageCompany/StorageCompanyContracts/ViewModels/ProviderViewModel.cs new file mode 100644 index 0000000..ef4eedf --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/ViewModels/ProviderViewModel.cs @@ -0,0 +1,16 @@ +using StorageCompanyDataModels.Models; +using System.ComponentModel; + +namespace StorageCompanyContracts.ViewModels +{ + public class ProviderViewModel : IProviderModel + { + public int Id { get; set; } + [DisplayName("Provider's FIO")] + public string ProviderFIO { get; set; } = string.Empty; + [DisplayName("Login (Email)")] + public string Email { get; set; } = string.Empty; + [DisplayName("Password")] + public string Password { get; set; } = string.Empty; + } +} diff --git a/StorageCompany/StorageCompanyContracts/ViewModels/SaleViewModel.cs b/StorageCompany/StorageCompanyContracts/ViewModels/SaleViewModel.cs new file mode 100644 index 0000000..651dfeb --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/ViewModels/SaleViewModel.cs @@ -0,0 +1,18 @@ +using StorageCompanyDataModels.Models; +using System.ComponentModel; + +namespace StorageCompanyContracts.ViewModels +{ + public class SaleViewModel : ISaleModel + { + public int Id { get; set; } + public int ClientId { get; set; } + [DisplayName("Client")] + public string ClientFIO { get; set; } = string.Empty; + public int ProductId { get; set; } + [DisplayName("Product")] + public string ProductName { get; set; } = string.Empty; + [DisplayName("Num")] + public int SaleNum { get; set; } + } +} diff --git a/StorageCompany/StorageCompanyContracts/ViewModels/SupplyViewModel.cs b/StorageCompany/StorageCompanyContracts/ViewModels/SupplyViewModel.cs new file mode 100644 index 0000000..aa88921 --- /dev/null +++ b/StorageCompany/StorageCompanyContracts/ViewModels/SupplyViewModel.cs @@ -0,0 +1,18 @@ +using StorageCompanyDataModels.Models; +using System.ComponentModel; + +namespace StorageCompanyContracts.ViewModels +{ + public class SupplyViewModel : ISupplyModel + { + public int Id { get; set; } + public int ProviderId { get; set; } + [DisplayName("Provider")] + public string ProviderFIO { get; set; } = string.Empty; + public int ProductId { get; set; } + [DisplayName("Product")] + public string ProductName { get; set; } = string.Empty; + [DisplayName("Num")] + public int SupplyNum { get; set; } + } +}