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("Исполнитель с такими ФИО уже есть."); + } + } + } +}