From b628efed1a84315a95922116bc5ba7560b9b6558 Mon Sep 17 00:00:00 2001 From: the Date: Fri, 7 Apr 2023 19:18:33 +0400 Subject: [PATCH] Fix --- .../BusinessLogics/ClientLogic.cs | 117 ++++++++++++++++++ .../ComputerShopClientApp/appsettings.json | 3 +- .../Controllers/ClientController.cs | 3 +- .../ComputerShopRestApi/Program.cs | 5 +- 4 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ClientLogic.cs diff --git a/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ClientLogic.cs b/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ClientLogic.cs new file mode 100644 index 0000000..9acfd25 --- /dev/null +++ b/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ClientLogic.cs @@ -0,0 +1,117 @@ +using ComputerShopContracts.BindingModels; +using ComputerShopContracts.BusinessLogicContracts; +using ComputerShopContracts.SearchModels; +using ComputerShopContracts.StorageContracts; +using ComputerShopContracts.ViewModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ComputerShopBusinessLogic.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)); + } + _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/ComputerShopProvider/ComputerShopClientApp/appsettings.json b/ComputerShopProvider/ComputerShopClientApp/appsettings.json index 10f68b8..d61f921 100644 --- a/ComputerShopProvider/ComputerShopClientApp/appsettings.json +++ b/ComputerShopProvider/ComputerShopClientApp/appsettings.json @@ -5,5 +5,6 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "IPAddress": "http://localhost:5216/" } diff --git a/ComputerShopProvider/ComputerShopRestApi/Controllers/ClientController.cs b/ComputerShopProvider/ComputerShopRestApi/Controllers/ClientController.cs index f669db9..b522fea 100644 --- a/ComputerShopProvider/ComputerShopRestApi/Controllers/ClientController.cs +++ b/ComputerShopProvider/ComputerShopRestApi/Controllers/ClientController.cs @@ -1,8 +1,9 @@ using ComputerShopContracts.BindingModels; -using ComputerShopContracts.BusinessLogicContracts; using ComputerShopContracts.SearchModels; using ComputerShopContracts.ViewModels; +using ComputerShopBusinessLogic.BusinessLogics; using Microsoft.AspNetCore.Mvc; +using ComputerShopContracts.BusinessLogicContracts; [Route("api/[controller]/[action]")] [ApiController] diff --git a/ComputerShopProvider/ComputerShopRestApi/Program.cs b/ComputerShopProvider/ComputerShopRestApi/Program.cs index 487ee71..e538d6c 100644 --- a/ComputerShopProvider/ComputerShopRestApi/Program.cs +++ b/ComputerShopProvider/ComputerShopRestApi/Program.cs @@ -1,3 +1,4 @@ +using ComputerShopBusinessLogic.BusinessLogics; using ComputerShopContracts.BusinessLogicContracts; using ComputerShopContracts.StorageContracts; using ComputerShopDatabaseImplement.Implements; @@ -13,7 +14,9 @@ builder.Logging.AddLog4Net("log4net.config"); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); -builder.Services.AddTransient(); +builder.Services.AddTransient(); +builder.Services.AddTransient(); +builder.Services.AddTransient(); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle