using HospitalContracts.BindingModels; using HospitalContracts.ViewModels; using HospitalDataModels.Models; using SecuritySystemDatabaseImplement; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace HospitalDatabaseImplement.Models { public class Course : ICourseModel { public int Id { get; set; } [Required] public int Days { get; set; } [Required] public int PillsInDay { get; set; } public string Comment { get; set; } = string.Empty; [ForeignKey("CourseId")] public virtual List Diagnoses { get; set; } = new(); private Dictionary? _courseDiagnoses = null; [NotMapped] public Dictionary CourseDiagnoses { get { if (_courseDiagnoses == null) { _courseDiagnoses = Diagnoses.ToDictionary( courseDiagnose => courseDiagnose.DiagnoseId, courseDiagnose => courseDiagnose.Diagnose as IDiagnoseModel ); } return _courseDiagnoses; } } public static Course Create(HospitalDatabase context, CourseBindingModel model) { return new Course() { Id = model.Id, Days = model.Days, PillsInDay = model.PillsInDay, Comment = model.Comment, Diagnoses = model.CourseDiagnoses.Select(courseDiagnose => new CourseDiagnose { Diagnose = context.Diagnoses.First(diagnose => diagnose.Id == courseDiagnose.Key) }).ToList() }; } public void Update(CourseBindingModel model) { Days = model.Days; PillsInDay = model.PillsInDay; Comment = model.Comment; } public CourseViewModel GetViewModel => new() { Id = Id, Days = Days, PillsInDay = PillsInDay, Comment = Comment, CourseDiagnoses = CourseDiagnoses }; public void UpdateDiagnoses(HospitalDatabase context, CourseBindingModel model) { var courseDiagnoses = context.CourseDiagnoses.Where(rec => rec.CourseId == model.Id).ToList(); if (courseDiagnoses != null && courseDiagnoses.Count > 0) { context.CourseDiagnoses.RemoveRange(courseDiagnoses .Where(rec => !model.CourseDiagnoses.ContainsKey(rec.DiagnoseId))); context.SaveChanges(); } var course = context.Courses.First(x => x.Id == Id); foreach (var pc in model.CourseDiagnoses) { context.CourseDiagnoses.Add(new CourseDiagnose { Course = course, Diagnose = context.Diagnoses.First(x => x.Id == pc.Key), }); context.SaveChanges(); } _courseDiagnoses = null; } } }