diff --git a/University/UniversityBuisnessLogic/UserLogic.cs b/University/UniversityBuisnessLogic/UserLogic.cs new file mode 100644 index 0000000..7c0557d --- /dev/null +++ b/University/UniversityBuisnessLogic/UserLogic.cs @@ -0,0 +1,130 @@ +using UniversityContracts.BindingModels; +using UniversityContracts.BuisnessLogicContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StoragesContracts; +using UniversityContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace UniversityBuisnessLogic +{ + public class UserLogic : IUserLogic + { + private readonly ILogger _logger; + private readonly IUserStorage _userStorage; + + public UserLogic(ILogger logger, IUserStorage userStorage) + { + _logger = logger; + _userStorage = userStorage; + } + + public bool Create(UserBindingModel model) + { + CheckModel(model); + if (_userStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Delete(UserBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_userStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public UserViewModel? ReadElement(UserSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{Id}", model.Id); + var element = _userStorage.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(UserSearchModel? model) + { + _logger.LogInformation("ReadList. Id:{Id}", model?.Id); + var list = model == null ? _userStorage.GetFullList() : _userStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public bool Update(UserBindingModel model) + { + CheckModel(model); + if (_userStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + private void CheckModel(UserBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.Name)) + { + throw new ArgumentNullException("Нет имени пользователя", nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.Surname)) + { + throw new ArgumentNullException("Нет фамилии пользователя", nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.Login)) + { + throw new ArgumentNullException("Нет логина", nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет фамилии пароля", nameof(model.Name)); + } + else if (model.Password.Length < 6) + { + throw new ArgumentNullException("В пароле должно быть не менее 6 символов", nameof(model.Name)); + } + + _logger.LogInformation("User. Name:{Name}. Surname:{Surname}. Login: {Login} " + + "Password: {Password}. Id: {Id}", model.Name, model.Surname, model.Login, model.Password, model.Id); + + var element = _userStorage.GetElement(new UserSearchModel + { + Login = model.Login, + }); + + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Пользователь с таким логином уже есть"); + } + } + } +}