From 5e0f6fd0be6a1e729eed40cc1582bfc8c2907a1e Mon Sep 17 00:00:00 2001 From: ValAnn Date: Mon, 29 Apr 2024 12:31:20 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B1=D0=B0=D0=B7=D1=8B=20=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BD=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BindingModels/PatientBindingModel.cs | 2 +- .../Models/IPatientModel.cs | 2 +- .../Models/Disease.cs | 77 +++++++++++ .../Models/Doctor.cs | 98 ++++++++++++++ .../Models}/Medicine.cs | 0 .../Models}/MedicineRecipes.cs | 0 .../Models/Patient.cs | 128 ++++++++++++++++++ .../Models}/Pharmacist.cs | 0 .../Models}/Procedure.cs | 0 .../Models}/ProcedureMedicine.cs | 0 .../Models}/Recipe.cs | 0 11 files changed, 305 insertions(+), 2 deletions(-) create mode 100644 Hospital/HospitalDatabaseImplement/Models/Disease.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/Doctor.cs rename Hospital/{HospitalDataBaseImplement/Modelss => HospitalDatabaseImplement/Models}/Medicine.cs (100%) rename Hospital/{HospitalDataBaseImplement/Modelss => HospitalDatabaseImplement/Models}/MedicineRecipes.cs (100%) create mode 100644 Hospital/HospitalDatabaseImplement/Models/Patient.cs rename Hospital/{HospitalDataBaseImplement/Modelss => HospitalDatabaseImplement/Models}/Pharmacist.cs (100%) rename Hospital/{HospitalDataBaseImplement/Modelss => HospitalDatabaseImplement/Models}/Procedure.cs (100%) rename Hospital/{HospitalDataBaseImplement/Modelss => HospitalDatabaseImplement/Models}/ProcedureMedicine.cs (100%) rename Hospital/{HospitalDataBaseImplement/Modelss => HospitalDatabaseImplement/Models}/Recipe.cs (100%) diff --git a/Hospital/HospitalContracts/BindingModels/PatientBindingModel.cs b/Hospital/HospitalContracts/BindingModels/PatientBindingModel.cs index 3a8dd06..c23f176 100644 --- a/Hospital/HospitalContracts/BindingModels/PatientBindingModel.cs +++ b/Hospital/HospitalContracts/BindingModels/PatientBindingModel.cs @@ -13,7 +13,7 @@ namespace HospitalContracts.BindingModels public string FIO { get; set; } = string.Empty; - public string Adress { get; set; } = string.Empty; + public string Address { get; set; } = string.Empty; public DateOnly BirthDate { get; set; } diff --git a/Hospital/HospitalDataModels/Models/IPatientModel.cs b/Hospital/HospitalDataModels/Models/IPatientModel.cs index e9fecb2..003b52e 100644 --- a/Hospital/HospitalDataModels/Models/IPatientModel.cs +++ b/Hospital/HospitalDataModels/Models/IPatientModel.cs @@ -10,7 +10,7 @@ namespace HospitalDataModels.Models { string FIO { get; } DateOnly BirthDate { get; } - string Adress { get; } + string Address { get; } int DoctorId { get; } Dictionary PatientProcedures { get; } diff --git a/Hospital/HospitalDatabaseImplement/Models/Disease.cs b/Hospital/HospitalDatabaseImplement/Models/Disease.cs new file mode 100644 index 0000000..602b750 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Disease.cs @@ -0,0 +1,77 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDatabaseImplement.Modelss; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + public class Disease : IDiseaseModel + { + public int Id { get; set; } + + public int DoctorId { get; private set; } + + public virtual Doctor Doctor { get; set; } + + [Required] + [MaxLength(50)] + public string Name { get; set; } = string.Empty; + + [Required] + [MaxLength(150)] + public string Description { get; set; } = string.Empty; + + [ForeignKey("DiseaseId")] + public virtual List Recipes { get; set; } = new(); + + public static Disease? Create(DiseaseBindingModel model) + { + if (model == null) + { + return null; + } + return new Disease() + { + Id = model.Id, + Name = model.Name, + Description = model.Description, + DoctorId = model.DoctorId + }; + } + + public static Disease Create(DiseaseViewModel model) + { + return new Disease + { + Id = model.Id, + Name = model.Name, + Description = model.Description + }; + } + + public void Update(DiseaseBindingModel model) + { + if (model == null) + { + return; + } + Name = model.Name; + Description = model.Description; + } + + public DiseaseViewModel GetViewModel => new() + { + Id = Id, + Name = Name, + Description = Description + }; + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/Doctor.cs b/Hospital/HospitalDatabaseImplement/Models/Doctor.cs new file mode 100644 index 0000000..3a04347 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Doctor.cs @@ -0,0 +1,98 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDatabaseImplement.Modelss; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + public class Doctor : IDoctorModel + { + public int Id { get; set; } + + [Required] + [MaxLength(25)] + public string Login { get; set; } = string.Empty; + + [Required] + [MaxLength(11)] + public string PhoneNumber { get; set; } = string.Empty; + + [Required] + [MaxLength(30)] + public string Password { get; set; } = string.Empty; + + [Required] + [MaxLength(30)] + public string FIO { get; set; } = string.Empty; + + [Required] + [MaxLength(30)] + public string MailAddress { get; set; } = string.Empty; + + [ForeignKey("DoctorId")] + public virtual List Patients { get; set; } = new(); + + [ForeignKey("DoctorId")] + public virtual List Recipes { get; set; } = new(); + + [ForeignKey("DoctorId")] + public virtual List Diseases { get; set; } = new(); + + public static Doctor? Create(DoctorBindingModel model) + { + if (model == null) + { + return null; + } + return new Doctor() + { + Id = model.Id, + Login = model.Login, + PhoneNumber = model.PhoneNumber, + Password = model.Password, + FIO = model.FIO, + MailAddress = model.MailAddress + }; + } + public static Doctor Create(DoctorViewModel model) + { + return new Doctor + { + Id = model.Id, + Login = model.Login, + PhoneNumber = model.PhoneNumber, + Password = model.Password, + FIO = model.FIO, + MailAddress = model.MailAddress + }; + } + public void Update(DoctorBindingModel model) + { + if (model == null) + { + return; + } + Login = model.Login; + PhoneNumber = model.PhoneNumber; + Password = model.Password; + FIO = model.FIO; + MailAddress = model.MailAddress; + } + public DoctorViewModel GetViewModel => new() + { + Id = Id, + Login = Login, + PhoneNumber = PhoneNumber, + Password = Password, + FIO = FIO, + MailAddress = MailAddress + }; + } +} diff --git a/Hospital/HospitalDataBaseImplement/Modelss/Medicine.cs b/Hospital/HospitalDatabaseImplement/Models/Medicine.cs similarity index 100% rename from Hospital/HospitalDataBaseImplement/Modelss/Medicine.cs rename to Hospital/HospitalDatabaseImplement/Models/Medicine.cs diff --git a/Hospital/HospitalDataBaseImplement/Modelss/MedicineRecipes.cs b/Hospital/HospitalDatabaseImplement/Models/MedicineRecipes.cs similarity index 100% rename from Hospital/HospitalDataBaseImplement/Modelss/MedicineRecipes.cs rename to Hospital/HospitalDatabaseImplement/Models/MedicineRecipes.cs diff --git a/Hospital/HospitalDatabaseImplement/Models/Patient.cs b/Hospital/HospitalDatabaseImplement/Models/Patient.cs new file mode 100644 index 0000000..de1b16e --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Patient.cs @@ -0,0 +1,128 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + public class Patient : IPatientModel + { + public int Id { get; set; } + + public int DoctorId { get; private set; } + + public virtual Doctor Doctor { get; set; } + + [Required] + [MaxLength(50)] + public string FIO { get; set; } = string.Empty; + + [Required] + [MaxLength(50)] + public string Address { get; set; } = string.Empty; + + [Required] + public DateOnly BirthDate { get; set; } + + private Dictionary? _patientRecipes = null; + + [NotMapped] + public Dictionary PatientRecipes + { + get + { + if (_patientRecipes == null) + { + _patientRecipes = Recipes.ToDictionary(recPR => recPR.RecipeId, recPR => (recPR.Recipe as IRecipeModel)); + } + return _patientRecipes; + } + } + + [ForeignKey("PatientId")] + public virtual List Recipes { get; set; } = new(); + + private Dictionary? _patientProcedures = null; + + [NotMapped] + public Dictionary PatientProcedures + { + get + { + if (_patientProcedures == null) + { + _patientProcedures = Procedures.ToDictionary(recPP => recPP.ProcedureId, recPP => (recPP.Procedure as IProcedureModel)); + } + return _patientProcedures; + } + } + + [ForeignKey("PatientId")] + public virtual List Procedures { get; set; } = new(); + + public static Patient Create(HospitalDatabase context, PatientBindingModel model) + { + return new Patient() + { + Id = model.Id, + FIO = model.FIO, + Address = model.Address, + + BirthDate = model.BirthDate, + DoctorId = model.DoctorId, + Doctor = context.Doctors.First(x => x.Id == model.DoctorId), + Recipes = model.PatientRecipes.Select(x => new PatientRecipe + { + Recipe = context.Recipes.First(y => y.Id == x.Key), + }).ToList(), + Procedures = model.PatientProcedures.Select(x => new PatientProcedure + { + Procedure = context.Procedures.First(y => y.Id == x.Key), + }).ToList() + }; + } + + public void Update(PatientBindingModel model) + { + FIO = model.FIO; + Address = model.Address; + BirthDate = model.BirthDate; + } + + public PatientViewModel GetViewModel => new() + { + FIO = FIO, + Address = Address, + BirthDate = BirthDate, + PatientRecipes = PatientRecipes, + PatientProcedures = PatientProcedures + }; + + public void UpdateRecipes(HospitalDatabase context, PatientBindingModel model) + { + var patientRecipes = context.PatientRecipes.Where(rec => rec.PatientId == model.Id).ToList(); + if (patientRecipes != null) + { // удалили те, которых нет в модели + context.PatientRecipes.RemoveRange(patientRecipes.Where(rec => !model.PatientRecipes.ContainsKey(rec.RecipeId))); + context.SaveChanges(); + } + var patient = context.Patients.First(x => x.Id == Id); + foreach (var pr in model.PatientRecipes) + { + context.PatientRecipes.Add(new PatientRecipe + { + Patient = patient, + Recipe = context.Recipes.First(x => x.Id == pr.Key), + }); + context.SaveChanges(); + } + _patientRecipes = null; + } + } +} diff --git a/Hospital/HospitalDataBaseImplement/Modelss/Pharmacist.cs b/Hospital/HospitalDatabaseImplement/Models/Pharmacist.cs similarity index 100% rename from Hospital/HospitalDataBaseImplement/Modelss/Pharmacist.cs rename to Hospital/HospitalDatabaseImplement/Models/Pharmacist.cs diff --git a/Hospital/HospitalDataBaseImplement/Modelss/Procedure.cs b/Hospital/HospitalDatabaseImplement/Models/Procedure.cs similarity index 100% rename from Hospital/HospitalDataBaseImplement/Modelss/Procedure.cs rename to Hospital/HospitalDatabaseImplement/Models/Procedure.cs diff --git a/Hospital/HospitalDataBaseImplement/Modelss/ProcedureMedicine.cs b/Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs similarity index 100% rename from Hospital/HospitalDataBaseImplement/Modelss/ProcedureMedicine.cs rename to Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs diff --git a/Hospital/HospitalDataBaseImplement/Modelss/Recipe.cs b/Hospital/HospitalDatabaseImplement/Models/Recipe.cs similarity index 100% rename from Hospital/HospitalDataBaseImplement/Modelss/Recipe.cs rename to Hospital/HospitalDatabaseImplement/Models/Recipe.cs