From c2a498f5621de1118f43d617275e004f077a814f Mon Sep 17 00:00:00 2001 From: Yunusov_Niyaz Date: Tue, 30 Apr 2024 17:18:31 +0400 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=81=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogic/VisitLogic.cs | 6 +- .../BindingModels/PetBindingModel.cs | 3 +- .../BindingModels/VisitBindingModel.cs | 1 + .../SearchModels/PetSearchModel.cs | 1 + .../SearchModels/VisitSearchModel.cs | 1 + .../ViewModels/PetViewModel.cs | 2 + .../ViewModels/VisitViewModel.cs | 2 + .../VeterinaryDataModels/IDrugModel.cs | 16 ---- .../VeterinaryDataModels/IServiceModel.cs | 17 ---- .../VeterinaryDataModels/Models/IDrugModel.cs | 2 +- .../VeterinaryDataModels/Models/IPetModel.cs | 4 +- .../Models/IServiceModel.cs | 3 +- .../Models/IVisitModel.cs | 1 + .../Implements/VisitStorage.cs | 9 +- .../Models/Visit.cs | 2 + .../Controllers/PetController.cs | 82 +++++++++++++++++++ 16 files changed, 111 insertions(+), 41 deletions(-) delete mode 100644 VeterinaryView/VeterinaryDataModels/IDrugModel.cs delete mode 100644 VeterinaryView/VeterinaryDataModels/IServiceModel.cs diff --git a/VeterinaryView/VeterinaryBusinessLogic/BusinessLogic/VisitLogic.cs b/VeterinaryView/VeterinaryBusinessLogic/BusinessLogic/VisitLogic.cs index f5f6b42..63e2a0f 100644 --- a/VeterinaryView/VeterinaryBusinessLogic/BusinessLogic/VisitLogic.cs +++ b/VeterinaryView/VeterinaryBusinessLogic/BusinessLogic/VisitLogic.cs @@ -99,11 +99,15 @@ namespace VeterinaryBusinessLogic.BusinessLogic { return; } + if (string.IsNullOrEmpty(model.VisitName)) + { + throw new ArgumentNullException("Нет названия визита", nameof(model.VisitName)); + } if (model.DateVisit >= DateTime.Now) { throw new ArgumentNullException("Дата посещения не должна быть в прошлом", nameof(model.DateVisit)); } - _logger.LogInformation("Visit. DateVisit:{ DateVisit}. Id: { Id}", model.DateVisit); + _logger.LogInformation("Visit. Visit:{NameVisit}. DateVisit:{ DateVisit}. Id: { Id}", model.VisitName, model.DateVisit, model.Id); } } } diff --git a/VeterinaryView/VeterinaryContracts/BindingModels/PetBindingModel.cs b/VeterinaryView/VeterinaryContracts/BindingModels/PetBindingModel.cs index b8a792c..33c327a 100644 --- a/VeterinaryView/VeterinaryContracts/BindingModels/PetBindingModel.cs +++ b/VeterinaryView/VeterinaryContracts/BindingModels/PetBindingModel.cs @@ -10,6 +10,7 @@ namespace VeterinaryContracts.BindingModels public string PetType { get; set;} = string.Empty; public string PetBreed { get; set; } = string.Empty; public string PetGender { get; set; } = string.Empty; - + public Dictionary VisitPets { get; set; } = new(); + public Dictionary PurchasePets { get; set; } = new(); } } diff --git a/VeterinaryView/VeterinaryContracts/BindingModels/VisitBindingModel.cs b/VeterinaryView/VeterinaryContracts/BindingModels/VisitBindingModel.cs index a4672da..6738168 100644 --- a/VeterinaryView/VeterinaryContracts/BindingModels/VisitBindingModel.cs +++ b/VeterinaryView/VeterinaryContracts/BindingModels/VisitBindingModel.cs @@ -8,6 +8,7 @@ namespace VeterinaryContracts.BindingModels public int Id { get; set; } public int OwnerId { get; set; } public int? DoctorId { get; set; } = null; + public string VisitName { get; set; } = string.Empty; public VisitStatus Status { get; set; } public DateTime DateVisit { get; set; } public Dictionary VisitPet { get; set; } = new(); diff --git a/VeterinaryView/VeterinaryContracts/SearchModels/PetSearchModel.cs b/VeterinaryView/VeterinaryContracts/SearchModels/PetSearchModel.cs index da358f5..f954c10 100644 --- a/VeterinaryView/VeterinaryContracts/SearchModels/PetSearchModel.cs +++ b/VeterinaryView/VeterinaryContracts/SearchModels/PetSearchModel.cs @@ -3,6 +3,7 @@ public class PetSearchModel { public int? Id { get; set; } + public int? OwnerId { get; set; } public string? PetName { get; set; } } } diff --git a/VeterinaryView/VeterinaryContracts/SearchModels/VisitSearchModel.cs b/VeterinaryView/VeterinaryContracts/SearchModels/VisitSearchModel.cs index 3796418..15d07b7 100644 --- a/VeterinaryView/VeterinaryContracts/SearchModels/VisitSearchModel.cs +++ b/VeterinaryView/VeterinaryContracts/SearchModels/VisitSearchModel.cs @@ -7,6 +7,7 @@ namespace VeterinaryContracts.SearchModels public int? Id { get; set; } public int? OwnerId { get; set; } public int? DoctorId { get; set; } + public string? VisitName { get; set; } public VisitStatus? Status { get; set; } public DateTime? DateVisit { get; set; } } diff --git a/VeterinaryView/VeterinaryContracts/ViewModels/PetViewModel.cs b/VeterinaryView/VeterinaryContracts/ViewModels/PetViewModel.cs index ca31ef8..209ef75 100644 --- a/VeterinaryView/VeterinaryContracts/ViewModels/PetViewModel.cs +++ b/VeterinaryView/VeterinaryContracts/ViewModels/PetViewModel.cs @@ -16,5 +16,7 @@ namespace VeterinaryContracts.ViewModels public string PetBreed { get; set; } = string.Empty; [DisplayName("Пол")] public string PetGender { get; set; } = string.Empty; + public Dictionary VisitPets { get; set; } = new(); + public Dictionary PurchasePets { get; set; } = new(); } } diff --git a/VeterinaryView/VeterinaryContracts/ViewModels/VisitViewModel.cs b/VeterinaryView/VeterinaryContracts/ViewModels/VisitViewModel.cs index 111a4d3..2f679de 100644 --- a/VeterinaryView/VeterinaryContracts/ViewModels/VisitViewModel.cs +++ b/VeterinaryView/VeterinaryContracts/ViewModels/VisitViewModel.cs @@ -11,6 +11,8 @@ namespace VeterinaryContracts.ViewModels public int OwnerId { get; set; } [DisplayName("Врач")] public int? DoctorId { get; set; } = null; + [DisplayName("Название визита")] + public string VisitName { get; set; } = string.Empty; [DisplayName("Статус")] public VisitStatus Status { get; set; } [DisplayName("Дата посещения")] diff --git a/VeterinaryView/VeterinaryDataModels/IDrugModel.cs b/VeterinaryView/VeterinaryDataModels/IDrugModel.cs deleted file mode 100644 index f41989d..0000000 --- a/VeterinaryView/VeterinaryDataModels/IDrugModel.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace VeterinaryDataModels -{ - public interface IDrugModel :IId - { - string DrugName { get; } - int Count { get; } - double Price { get; } - Dictionary DrugMedications { get; } - } -} diff --git a/VeterinaryView/VeterinaryDataModels/IServiceModel.cs b/VeterinaryView/VeterinaryDataModels/IServiceModel.cs deleted file mode 100644 index 743cb2e..0000000 --- a/VeterinaryView/VeterinaryDataModels/IServiceModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace VeterinaryDataModels -{ - public interface IServiceModel : IId - { - String ServiceName { get;} - int VisitId { get; } - int DoctorId { get; } - Dictionary ServiceMedications { get; } - - } -} diff --git a/VeterinaryView/VeterinaryDataModels/Models/IDrugModel.cs b/VeterinaryView/VeterinaryDataModels/Models/IDrugModel.cs index 5ba6bd0..6579c66 100644 --- a/VeterinaryView/VeterinaryDataModels/Models/IDrugModel.cs +++ b/VeterinaryView/VeterinaryDataModels/Models/IDrugModel.cs @@ -11,6 +11,6 @@ namespace VeterinaryDataModels.Models string DrugName { get; } int Count { get; } double Price { get; } - Dictionary DrugMedications { get; } + Dictionary DrugMedications { get; } } } diff --git a/VeterinaryView/VeterinaryDataModels/Models/IPetModel.cs b/VeterinaryView/VeterinaryDataModels/Models/IPetModel.cs index d9ce5b7..b22ce3d 100644 --- a/VeterinaryView/VeterinaryDataModels/Models/IPetModel.cs +++ b/VeterinaryView/VeterinaryDataModels/Models/IPetModel.cs @@ -7,5 +7,7 @@ string PetType { get; } string PetBreed { get; } string PetGender { get; } - } + Dictionary VisitPets { get; } + Dictionary PurchasePets { get; } + } } diff --git a/VeterinaryView/VeterinaryDataModels/Models/IServiceModel.cs b/VeterinaryView/VeterinaryDataModels/Models/IServiceModel.cs index 75903a2..b81d74a 100644 --- a/VeterinaryView/VeterinaryDataModels/Models/IServiceModel.cs +++ b/VeterinaryView/VeterinaryDataModels/Models/IServiceModel.cs @@ -11,7 +11,6 @@ namespace VeterinaryDataModels.Models string ServiceName { get; } int VisitId { get; } int DoctorId { get; } - Dictionary ServiceMedications { get; } - + Dictionary ServiceMedications { get; } } } diff --git a/VeterinaryView/VeterinaryDataModels/Models/IVisitModel.cs b/VeterinaryView/VeterinaryDataModels/Models/IVisitModel.cs index e2008b9..b2999c7 100644 --- a/VeterinaryView/VeterinaryDataModels/Models/IVisitModel.cs +++ b/VeterinaryView/VeterinaryDataModels/Models/IVisitModel.cs @@ -6,6 +6,7 @@ namespace VeterinaryDataModels.Models { int OwnerId { get; } int? DoctorId { get; } + string VisitName { get; } DateTime DateVisit { get; } VisitStatus Status { get; } Dictionary VisitPet { get; } diff --git a/VeterinaryView/VeterinaryDatabaseImplement/Implements/VisitStorage.cs b/VeterinaryView/VeterinaryDatabaseImplement/Implements/VisitStorage.cs index 896889c..2742453 100644 --- a/VeterinaryView/VeterinaryDatabaseImplement/Implements/VisitStorage.cs +++ b/VeterinaryView/VeterinaryDatabaseImplement/Implements/VisitStorage.cs @@ -18,9 +18,14 @@ namespace VeterinaryDatabaseImplement.Implements } public List GetFilteredList(VisitSearchModel model) { + if (string.IsNullOrEmpty(model.VisitName)) + { + return null; + } using var context = new VeterinaryDatabase(); return context.Visits.Include(x => x.Owner).Include(x => x.Pets).ThenInclude(x => x.Pet).Include(x => x.Doctor) .Where(x => ((!model.Id.HasValue || x.Id == model.Id) && + (string.IsNullOrEmpty(model.VisitName) || x.VisitName.Contains(model.VisitName)) && (!model.DateVisit.HasValue || x.DateVisit >= model.DateVisit) && (!model.OwnerId.HasValue || x.OwnerId <= model.OwnerId) && (!model.DoctorId.HasValue || x.DoctorId == model.DoctorId))) @@ -29,13 +34,13 @@ namespace VeterinaryDatabaseImplement.Implements } public VisitViewModel? GetElement(VisitSearchModel model) { - if (!model.Id.HasValue) + if (string.IsNullOrEmpty(model.VisitName) && !model.Id.HasValue) { return null; } using var context = new VeterinaryDatabase(); return context.Visits.Include(x => x.Owner).Include(x => x.Pets).ThenInclude(x => x.Pet).Include(x => x.Doctor) - .FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.VisitName) && x.VisitName == model.VisitName) || (x.Id == model.Id))?.GetViewModel; } public VisitViewModel? Insert(VisitBindingModel model) { diff --git a/VeterinaryView/VeterinaryDatabaseImplement/Models/Visit.cs b/VeterinaryView/VeterinaryDatabaseImplement/Models/Visit.cs index 23c1506..6872219 100644 --- a/VeterinaryView/VeterinaryDatabaseImplement/Models/Visit.cs +++ b/VeterinaryView/VeterinaryDatabaseImplement/Models/Visit.cs @@ -17,6 +17,8 @@ namespace VeterinaryDatabaseImplement.Models public int? DoctorId { get; private set; } public virtual Doctor? Doctor { get; private set; } [Required] + public string VisitName { get; private set; } + [Required] public VisitStatus Status { get; private set; } [Required] public DateTime DateVisit { get; private set; } diff --git a/VeterinaryView/VeterinaryRestApi/Controllers/PetController.cs b/VeterinaryView/VeterinaryRestApi/Controllers/PetController.cs index 29a6019..2a559d4 100644 --- a/VeterinaryView/VeterinaryRestApi/Controllers/PetController.cs +++ b/VeterinaryView/VeterinaryRestApi/Controllers/PetController.cs @@ -1,4 +1,8 @@ using Microsoft.AspNetCore.Mvc; +using VeterinaryContracts.BindingModels; +using VeterinaryContracts.BusinessLogicContracts; +using VeterinaryContracts.SearchModels; +using VeterinaryContracts.ViewModels; namespace VeterinaryRestApi.Controllers { @@ -6,5 +10,83 @@ namespace VeterinaryRestApi.Controllers [ApiController] public class PetController : Controller { + private readonly ILogger _logger; + private readonly IPetLogic _pet; + public PetController(ILogger logger, IPetLogic pet) + { + _logger = logger; + _pet = pet; + } + [HttpGet] + public Tuple>? GetPet(int petId) + { + try + { + var elem = _pet.ReadElement(new PetSearchModel { Id = petId }); + if (elem == null) + return null; + return Tuple.Create(elem, elem.VisitPets.Select(x => x.Value.Name).ToList()); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения услуги по id={Id}", petId); + throw; + } + } + [HttpGet] + public List GetPets(int ownerId) + { + try + { + return _pet.ReadList(new PetSearchModel { OwnerId = ownerId }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения списка услуг"); + throw; + } + } + [HttpPost] + public bool CreatePet(PetBindingModel model) + { + try + { + return _pet.Create(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Не удалось создать услугу"); + throw; + } + } + + [HttpPost] + public bool UpdatePet(PetBindingModel model) + { + try + { + model.Pets = null!; + return _pet.Update(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Не удалось обновить услугу"); + throw; + } + } + + [HttpPost] + public bool DeletePet(PetBindingModel model) + { + try + { + return _pet.Delete(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления услуги"); + throw; + } + } } }