From d1a3aa455df221a85444ed1b59dca3d1b955d9b1 Mon Sep 17 00:00:00 2001 From: ekallin Date: Sat, 6 Apr 2024 14:55:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B1=D0=B8=D0=B7=D0=BD=D0=B5=D1=81=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=B0=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SushiBarBusinessLogic/ClientLogic.cs | 116 ++++++++++++++++++ .../{Interface1.cs => IClientModel.cs} | 0 SushiBarDataModels/IOrderModel.cs | 1 + 3 files changed, 117 insertions(+) create mode 100644 SushiBarBusinessLogic/ClientLogic.cs rename SushiBarDataModels/{Interface1.cs => IClientModel.cs} (100%) diff --git a/SushiBarBusinessLogic/ClientLogic.cs b/SushiBarBusinessLogic/ClientLogic.cs new file mode 100644 index 0000000..4e68d36 --- /dev/null +++ b/SushiBarBusinessLogic/ClientLogic.cs @@ -0,0 +1,116 @@ +using Microsoft.Extensions.Logging; +using SushiBarContracts.BindingModel; +using SushiBarContracts.BusinessLogicsContracts; +using SushiBarContracts.SearchModel; +using SushiBarContracts.StoragesContracts; +using SushiBarContracts.ViewModels; + +namespace SushiBarBusinessLogic +{ + 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) + { + CheckUser(model); + if (_clientStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(ClientBindingModel model) + { + CheckUser(model); + if (_clientStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(ClientBindingModel model) + { + CheckUser(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. UserName:{UserName}.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; + } + + public void CheckUser(ClientBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ClientFIO)) + { + throw new ArgumentNullException("Invalid fullname of user", nameof(model.ClientFIO)); + } + if (string.IsNullOrEmpty(model.Email)) + { + throw new ArgumentNullException("Invalid email of user", nameof(model.Email)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Invalid password of user", 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("User with such email already exists."); + } + } + } +} diff --git a/SushiBarDataModels/Interface1.cs b/SushiBarDataModels/IClientModel.cs similarity index 100% rename from SushiBarDataModels/Interface1.cs rename to SushiBarDataModels/IClientModel.cs diff --git a/SushiBarDataModels/IOrderModel.cs b/SushiBarDataModels/IOrderModel.cs index 4e2c03d..a4098ea 100644 --- a/SushiBarDataModels/IOrderModel.cs +++ b/SushiBarDataModels/IOrderModel.cs @@ -5,6 +5,7 @@ namespace SushiBarDataModels public interface IOrderModel : IId { int SushiId { get; } + int ClientId { get; } int Count { get; } double Sum { get; } OrderStatus Status { get; }