PIbd-21_CourseWork_Polyclin.../Polyclinic/PolyclinicDatabaseImplement/Models/Course.cs

102 lines
3.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<CourseDiagnose> Diagnoses { get; set; } = new();
private Dictionary<int, IDiagnoseModel>? _courseDiagnoses = null;
public Dictionary<int, IDiagnoseModel> 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,
CourseName = CourseName,
Price = Price,
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;
}
}
}