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; [Required] public int RecipeId { get; set; } public virtual Recipe Recipe { get; set; } = new(); [ForeignKey("CourseId")] public virtual List Diagnoses { get; set; } = new(); private Dictionary? _courseDiagnoses = null; public Dictionary CourseDiagnoses { get { if (_courseDiagnoses == null) { _courseDiagnoses = Diagnoses.ToDictionary( courseDiagnose => courseDiagnose.DiagnoseId, courseDiagnose => courseDiagnose.Diagnose as IDiagnoseModel ); } return _courseDiagnoses; } } public static Course Create(SecuritySystemDatabase context, CourseBindingModel model) { return new Course() { Id = model.Id, DaysCount = model.DaysCount, PillsPerDay = model.PillsPerDay, Comment = model.Comment, RecipeId = model.RecipeId, 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; RecipeId = model.RecipeId; } public CourseViewModel GetViewModel => new() { Id = Id, DaysCount = DaysCount, PillsPerDay = PillsPerDay, Comment = Comment, RecipeId = RecipeId, CourseDiagnoses = CourseDiagnoses }; public void UpdateDiagnoses(SecuritySystemDatabase 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(); // // обновили количество у существующих записей // foreach (var updateDiagnose in courseDiagnoses) // { // updateDiagnose.Count = model.CourseDiagnoses[updateDiagnose.DiagnoseId].Item2; // model.CourseDiagnoses.Remove(updateDiagnose.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), // Count = pc.Value.Item2 // }); // context.SaveChanges(); //} //_courseDiagnoses = null; } } }