diff --git a/PIbd-23_Panina.A.D_JewelryStore/JewelryStore.sln b/PIbd-23_Panina.A.D_JewelryStore/JewelryStore.sln index 53d5613..68b05ee 100644 --- a/PIbd-23_Panina.A.D_JewelryStore/JewelryStore.sln +++ b/PIbd-23_Panina.A.D_JewelryStore/JewelryStore.sln @@ -19,7 +19,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JewelryStoreDatabaseImpleme EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JewelryStoreRestApi", "JewelryStoreRestApi\JewelryStoreRestApi.csproj", "{26DBFC2C-876E-47B7-B1BF-43873B807C6E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JewelryStoreShopApp", "JewelryStoreShopApp\JewelryStoreShopApp.csproj", "{784174AD-62FD-4777-99D8-26ED43CBF2C9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JewelryStoreClientApp", "JewelryStoreClientApp\JewelryStoreClientApp.csproj", "{DF7A00DE-A581-4A42-819F-4C49047FAE86}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JewelryStoreShopApp", "JewelryStoreShopApp\JewelryStoreShopApp.csproj", "{784174AD-62FD-4777-99D8-26ED43CBF2C9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -59,6 +61,10 @@ Global {26DBFC2C-876E-47B7-B1BF-43873B807C6E}.Debug|Any CPU.Build.0 = Debug|Any CPU {26DBFC2C-876E-47B7-B1BF-43873B807C6E}.Release|Any CPU.ActiveCfg = Release|Any CPU {26DBFC2C-876E-47B7-B1BF-43873B807C6E}.Release|Any CPU.Build.0 = Release|Any CPU + {DF7A00DE-A581-4A42-819F-4C49047FAE86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF7A00DE-A581-4A42-819F-4C49047FAE86}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF7A00DE-A581-4A42-819F-4C49047FAE86}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF7A00DE-A581-4A42-819F-4C49047FAE86}.Release|Any CPU.Build.0 = Release|Any CPU {784174AD-62FD-4777-99D8-26ED43CBF2C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {784174AD-62FD-4777-99D8-26ED43CBF2C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {784174AD-62FD-4777-99D8-26ED43CBF2C9}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/PIbd-23_Panina.A.D_JewelryStore/JewelryStoreBusinessLogic/BusinessLogics/ClientLogic.cs b/PIbd-23_Panina.A.D_JewelryStore/JewelryStoreBusinessLogic/BusinessLogics/ClientLogic.cs new file mode 100644 index 0000000..0dc1b59 --- /dev/null +++ b/PIbd-23_Panina.A.D_JewelryStore/JewelryStoreBusinessLogic/BusinessLogics/ClientLogic.cs @@ -0,0 +1,122 @@ +using JewelryStoreContracts.BindingModels; +using JewelryStoreContracts.BusinessLogicsContracts; +using JewelryStoreContracts.SearchModels; +using JewelryStoreContracts.StoragesModels; +using JewelryStoreContracts.ViewModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace JewelryStoreBusinessLogic.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 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. ClientFIO: {ClientFIO}. Email: {Email}. Id: {Id}.", model.ClientFIO, 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. ClientFIO: {ClientName}. Email: {Email}. Id: {Id}.", model?.ClientFIO, 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; + } + + public bool Update(ClientBindingModel model) + { + CheckModel(model); + if (_clientStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + 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. ClientFIO: {ClientFIO}. Email: {Email}. Id: {Id}", model.ClientFIO, model.Email, model.Id); + var element = _clientStorage.GetElement(new ClientSearchModel + { + Email = model.Email + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Клиент с такой почтой уже есть"); + } + } + } +} +