diff --git a/Hospital/HospitalBusinessLogic/BusinessLogics/PharmacistLogic.cs b/Hospital/HospitalBusinessLogic/BusinessLogics/PharmacistLogic.cs new file mode 100644 index 0000000..e908a59 --- /dev/null +++ b/Hospital/HospitalBusinessLogic/BusinessLogics/PharmacistLogic.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using HospitalDataModels.Models; +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalContracts.StoragesContracts; +using HospitalContracts.SearchModels; +using HospitalContracts.BusinessLogicContracts; + + +namespace HospitalBusinessLogic.BusinessLogics +{ + public class PharmacistLogic : IPharmacistLogic + { + private readonly ILogger _logger; + private readonly IPharmacistStorage _pharmacistStorage; + public PharmacistLogic(ILogger logger, IPharmacistStorage + pharmacistStorage) + { + _logger = logger; + _pharmacistStorage = pharmacistStorage; + } + public List? ReadList(PharmacistSearchModel? model) + { + _logger.LogInformation("ReadList. PharmacistFIO:{PharmacistFIO}. Id:{ Id}", model?.FIO, model?.Id); + var list = model == null ? _pharmacistStorage.GetFullList() : + _pharmacistStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + public PharmacistViewModel? ReadElement(PharmacistSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. PharmacistFIO:{PharmacistFIO}.Id:{ Id}", model.FIO, model.Id); + var element = _pharmacistStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + public bool Create(PharmacistBindingModel model) + { + CheckModel(model); + if (_pharmacistStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(PharmacistBindingModel model) + { + CheckModel(model); + if (_pharmacistStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(PharmacistBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_pharmacistStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + private void CheckModel(PharmacistBindingModel model, bool withParams = + true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.FIO)) + { + throw new ArgumentNullException("Нет ФИО клиента", + nameof(model.FIO)); + } + if (string.IsNullOrEmpty(model.Login)) + { + throw new ArgumentNullException("Нет Email клиента", + nameof(model.Login)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет пароля клиента", + nameof(model.Password)); + } + _logger.LogInformation("Pharmacist. PharmacistFIO:{PharmacistFIO}." + + "Email:{ Email}. Password:{ Password}. Id: { Id} ", model.FIO, model.Login, model.Password, model.Id); + var element = _pharmacistStorage.GetElement(new PharmacistSearchModel + { + Login = model.Login, + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Клиент с таким логином уже есть"); + } + } + } + +} + diff --git a/Hospital/HospitalBusinessLogic/HospitalBusinessLogic.csproj b/Hospital/HospitalBusinessLogic/HospitalBusinessLogic.csproj index 132c02c..3e4facb 100644 --- a/Hospital/HospitalBusinessLogic/HospitalBusinessLogic.csproj +++ b/Hospital/HospitalBusinessLogic/HospitalBusinessLogic.csproj @@ -6,4 +6,13 @@ enable + + + + + + + + + diff --git a/Hospital/HospitalDataModels/Models/IDescriptionProcedureModel.cs b/Hospital/HospitalDataModels/Models/IDescriptionProcedureModel.cs index f22ced5..bda3cf7 100644 --- a/Hospital/HospitalDataModels/Models/IDescriptionProcedureModel.cs +++ b/Hospital/HospitalDataModels/Models/IDescriptionProcedureModel.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; + namespace HospitalDataModels.Models { public interface IDescriptionProcedureModel