using PolyclinicContracts.BindingModels; using PolyclinicContracts.ViewModels; using PolyclinicDataModels.Models; using SecuritySystemDatabaseImplement; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace PolyclinicDatabaseImplement.Models { public class Course : ICourseModel { public int Id { get; set; } [Required] public int DaysCount { get; set; } [Required] public int PillsPerDay { 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(PolyclinicDatabase context, CourseBindingModel model) { return new Course() { Id = model.Id, DaysCount = model.DaysCount, PillsPerDay = model.PillsPerDay, 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) { DaysCount = model.DaysCount; PillsPerDay = model.PillsPerDay; Comment = model.Comment; } public CourseViewModel GetViewModel => new() { Id = Id, DaysCount = DaysCount, PillsPerDay = PillsPerDay, Comment = Comment, CourseDiagnoses = CourseDiagnoses }; public void UpdateDiagnoses(PolyclinicDatabase context, CourseBindingModel model) { var courseDiagnoses = context.CourseDiagnoses.Where(rec => rec.CourseId == model.Id).ToList(); if (courseDiagnoses != null && courseDiagnoses.Count > 0) { // удалили те, которых нет в модели context.CourseDiagnoses.RemoveRange(courseDiagnoses); 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; } } }