diff --git a/Medical/MedicalBusinessLogic/BusinessLogics/SpecializationLogic.cs b/Medical/MedicalBusinessLogic/BusinessLogics/SpecializationLogic.cs new file mode 100644 index 0000000..1765c76 --- /dev/null +++ b/Medical/MedicalBusinessLogic/BusinessLogics/SpecializationLogic.cs @@ -0,0 +1,53 @@ +using MedicalDatabaseContracts; +using MedicalDatabaseContracts.Models; +using MedicalDatabaseContracts.SearchModels; +using MedicalDatabaseContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace MedicalBusinessLogic.BusinessLogics +{ + public class SpecializationLogic : AbstractLogic + { + public SpecializationLogic( + ILogger> logger, + IStorage storage) : base(logger, storage) { } + + protected override bool CheckModelBySearchModel(Specialization model, SpecializationSearchModel searchModel) + { + if (searchModel.Id != null && searchModel.Id != model.Id) + return false; + if (!string.IsNullOrEmpty(searchModel.Name) && searchModel.Name != model.Name) + return false; + if (searchModel.IsPediatric != null && searchModel.IsPediatric != model.IsPediatric) + return false; + if (searchModel.IsTherapeutic != null && searchModel.IsTherapeutic != model.IsTherapeutic) + return false; + return true; + } + + protected override void CheckModelIsValid(Specialization model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + else if (string.IsNullOrEmpty(model.Name)) + { + throw new ArgumentNullException(nameof(model.Name)); + } + else if (ReadList(new SpecializationSearchModel { Name = model.Name }).Count != 0) + { + throw new InvalidOperationException($"Специальность с таким названием уже есть: \"{model.Name}\""); + } + } + + protected override SpecializationViewModel GetViewModel(Specialization model) + { + return new SpecializationViewModel { + Name = model.Name, + IsPediatric = model.IsPediatric, + IsTherapeutic = model.IsTherapeutic + }; + } + } +} diff --git a/Medical/MedicalDatabaseContracts/SearchModels/SpecializationSearchModel.cs b/Medical/MedicalDatabaseContracts/SearchModels/SpecializationSearchModel.cs index 0553df9..c3ba412 100644 --- a/Medical/MedicalDatabaseContracts/SearchModels/SpecializationSearchModel.cs +++ b/Medical/MedicalDatabaseContracts/SearchModels/SpecializationSearchModel.cs @@ -1,4 +1,8 @@ namespace MedicalDatabaseContracts.SearchModels { - public class SpecializationSearchModel : AbstractSearchModel { } + public class SpecializationSearchModel : AbstractSearchModel { + public string? Name { get; set; } + public bool? IsPediatric { get; set; } + public bool? IsTherapeutic { get; set; } + } }