diff --git a/Storehouse/StorehouseBusinessLogics/BusinessLogics/ClientLogic.cs b/Storehouse/StorehouseBusinessLogics/BusinessLogics/ClientLogic.cs new file mode 100644 index 0000000..4615cd1 --- /dev/null +++ b/Storehouse/StorehouseBusinessLogics/BusinessLogics/ClientLogic.cs @@ -0,0 +1,116 @@ +using StorehouseContracts.BindingModels; +using StorehouseContracts.BusinessLogicsContracts; +using StorehouseContracts.SearchModels; +using StorehouseContracts.StoragesContracts; +using StorehouseContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace StorehouseBusinessLogics.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/Storehouse/StorehouseBusinessLogics/BusinessLogics/ProductLogic.cs b/Storehouse/StorehouseBusinessLogics/BusinessLogics/ProductLogic.cs new file mode 100644 index 0000000..3590570 --- /dev/null +++ b/Storehouse/StorehouseBusinessLogics/BusinessLogics/ProductLogic.cs @@ -0,0 +1,110 @@ +using Microsoft.Extensions.Logging; +using StorehouseContracts.BindingModels; +using StorehouseContracts.BusinessLogicsContracts; +using StorehouseContracts.SearchModels; +using StorehouseContracts.StoragesContracts; +using StorehouseContracts.ViewModels; + +namespace StorehouseBusinessLogics.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 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)); + } + 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) + { + + } + } +} diff --git a/Storehouse/StorehouseBusinessLogics/BusinessLogics/ProviderLogic.cs b/Storehouse/StorehouseBusinessLogics/BusinessLogics/ProviderLogic.cs new file mode 100644 index 0000000..3c36c7e --- /dev/null +++ b/Storehouse/StorehouseBusinessLogics/BusinessLogics/ProviderLogic.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StorehouseBusinessLogics.BusinessLogics +{ + internal class ProviderLogic + { + } +} diff --git a/Storehouse/StorehouseBusinessLogics/BusinessLogics/SaleLogic.cs b/Storehouse/StorehouseBusinessLogics/BusinessLogics/SaleLogic.cs new file mode 100644 index 0000000..2f429a5 --- /dev/null +++ b/Storehouse/StorehouseBusinessLogics/BusinessLogics/SaleLogic.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StorehouseBusinessLogics.BusinessLogics +{ + internal class SaleLogic + { + } +} diff --git a/Storehouse/StorehouseBusinessLogics/BusinessLogics/SupplyLogic.cs b/Storehouse/StorehouseBusinessLogics/BusinessLogics/SupplyLogic.cs new file mode 100644 index 0000000..f955710 --- /dev/null +++ b/Storehouse/StorehouseBusinessLogics/BusinessLogics/SupplyLogic.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StorehouseBusinessLogics.BusinessLogics +{ + internal class SupplyLogic + { + } +} diff --git a/Storehouse/StorehouseBusinessLogics/StorehouseBusinessLogics.csproj b/Storehouse/StorehouseBusinessLogics/StorehouseBusinessLogics.csproj index 132c02c..d75e7de 100644 --- a/Storehouse/StorehouseBusinessLogics/StorehouseBusinessLogics.csproj +++ b/Storehouse/StorehouseBusinessLogics/StorehouseBusinessLogics.csproj @@ -6,4 +6,13 @@ enable + + + + + + + + + diff --git a/Storehouse/StorehouseContracts/BindingModels/ProductBindingModel.cs b/Storehouse/StorehouseContracts/BindingModels/ProductBindingModel.cs index 193b519..73f5b8c 100644 --- a/Storehouse/StorehouseContracts/BindingModels/ProductBindingModel.cs +++ b/Storehouse/StorehouseContracts/BindingModels/ProductBindingModel.cs @@ -8,6 +8,6 @@ namespace StorehouseContracts.BindingModels public int Id { get; set; } public string ProductName { get; set; } = string.Empty; public int ProductNum { get; set; } - public ProductType ProductType { get; set; } + public ProductType ProductType { get; set; } = ProductType.Неизвестен; } }