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; }