From 7f05646ae78d4839cd23e64507a2476d607fc786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=91=D0=B0=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D1=81=D0=BA=D0=B0=D1=8F?= Date: Sat, 20 Apr 2024 16:32:48 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=B1=D0=B8=D0=B7=D0=BD=D0=B5=D1=81=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=D0=B8=D0=BA=D1=83=20=D0=B4=D0=BB=D1=8F=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SushiBarBusinessLogic/ImplementerLogic.cs | 123 ++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 SushiBarBusinessLogic/ImplementerLogic.cs diff --git a/SushiBarBusinessLogic/ImplementerLogic.cs b/SushiBarBusinessLogic/ImplementerLogic.cs new file mode 100644 index 0000000..046b6e2 --- /dev/null +++ b/SushiBarBusinessLogic/ImplementerLogic.cs @@ -0,0 +1,123 @@ +using Microsoft.Extensions.Logging; +using SushiBarContracts.BindingModel; +using SushiBarContracts.BusinessLogicsContracts; +using SushiBarContracts.SearchModel; +using SushiBarContracts.StoragesContracts; +using SushiBarContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SushiBarBusinessLogic +{ + public class ImplementerLogic : IImplementerLogic + { + private readonly ILogger _logger; + private readonly IImplementerStorage _implementerStorage; + public ImplementerLogic(ILogger logger, IImplementerStorage implementerStorage) + { + _logger = logger; + _implementerStorage = implementerStorage; + } + public bool Create(ImplementerBindingModel model) + { + CheckImplementer(model); + if (_implementerStorage.Insert(model) == null) + { + _logger.LogWarning("Не получилось создать исполнителя"); + return false; + } + return true; + } + public bool Update(ImplementerBindingModel model) + { + CheckImplementer(model); + if (_implementerStorage.Update(model) == null) + { + _logger.LogWarning("Исправить исполнителя не получилось - люди не меняются"); + return false; + } + return true; + } + public bool Delete(ImplementerBindingModel model) + { + CheckImplementer(model, false); + _logger.LogInformation("Удаление. Id:{Id}", model.Id); + if (_implementerStorage.Delete(model) == null) + { + _logger.LogWarning("Не получилось удалить исполнителя..."); + return false; + } + return true; + } + + public ImplementerViewModel? ReadElement(ImplementerSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("Прочитали исполнителя: Id:{Id}.ImplementerFIO:{ImplementerFIO}", model.Id, model.ImplementerFIO); + var element = _implementerStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("не найден такой исполнитель"); + return null; + } + return element; + } + + public List? ReadList(ImplementerSearchModel? model) + { + var list = (model == null) ? _implementerStorage.GetFullList() : _implementerStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("нет исполнителей вообще-то"); + return null; + } + _logger.LogInformation("Прочитан список исполнителей. Количество:{Count}", list.Count); + return list; + } + + public void CheckImplementer(ImplementerBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ImplementerFIO)) + { + throw new ArgumentNullException("Имя исполнителя не может быть пустым!", nameof(model.ImplementerFIO)); + } + if(model.WorkExperience <= 0) + { + throw new ArgumentNullException("Опыт работы не может быть меньше или равен 0 лет..."); + } + if(model.Qualification <= 0) + { + throw new ArgumentNullException("Квалификация не может быть меньше или равен 0 лет..."); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Пароль исполнителя не может быть пустым!", nameof(model.Password)); + } + _logger.LogInformation("Исполнитель. ImplementerFIO:{ImplementerFIO}. Password:{Password}. WorkExperience:{WorkExperience}. Id:{Id} ", model.ImplementerFIO, model.Password, model.WorkExperience, model.Id); + + var element = _implementerStorage.GetElement(new ImplementerSearchModel + { + ImplementerFIO = model.ImplementerFIO + }); + + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Исполнитель с такими ФИО уже есть."); + } + } + } +}