Этап 3. Реализация слоя хранения данных БД
This commit is contained in:
parent
52829f9e46
commit
c23bffa073
@ -3,11 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.3.32901.215
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalWeb", "HospitalWeb\HospitalWeb.csproj", "{E227FF03-D689-4C2C-ACAD-5440A68A6C20}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalWeb", "HospitalWeb\HospitalWeb.csproj", "{E227FF03-D689-4C2C-ACAD-5440A68A6C20}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalDataModels", "HospitalDataModels\HospitalDataModels.csproj", "{0CB78C46-D21B-4BF8-BA79-CF2A2F4D5452}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalDataModels", "HospitalDataModels\HospitalDataModels.csproj", "{0CB78C46-D21B-4BF8-BA79-CF2A2F4D5452}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalContracts", "HospitalContracts\HospitalContracts.csproj", "{F24FE3B9-EA65-4793-A950-68857BCC7DB2}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalContracts", "HospitalContracts\HospitalContracts.csproj", "{F24FE3B9-EA65-4793-A950-68857BCC7DB2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalDatabaseImplement", "HospitalDatabaseImplement\HospitalDatabaseImplement.csproj", "{B99AB6C1-2F4F-4E40-B933-45CE5E6CC37B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@ -27,6 +29,10 @@ Global
|
||||
{F24FE3B9-EA65-4793-A950-68857BCC7DB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F24FE3B9-EA65-4793-A950-68857BCC7DB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F24FE3B9-EA65-4793-A950-68857BCC7DB2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B99AB6C1-2F4F-4E40-B933-45CE5E6CC37B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B99AB6C1-2F4F-4E40-B933-45CE5E6CC37B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B99AB6C1-2F4F-4E40-B933-45CE5E6CC37B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B99AB6C1-2F4F-4E40-B933-45CE5E6CC37B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
28
Hospital/HospitalDatabaseImplement/HospitalDatabase.cs
Normal file
28
Hospital/HospitalDatabaseImplement/HospitalDatabase.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using HospitalDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace HospitalDatabaseImplement
|
||||
{
|
||||
public class HospitalDatabase : DbContext
|
||||
{
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
if (optionsBuilder.IsConfigured == false)
|
||||
{
|
||||
optionsBuilder.UseSqlServer(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=FurnitureAssemblyDatabaseFull;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
|
||||
}
|
||||
base.OnConfiguring(optionsBuilder);
|
||||
}
|
||||
public virtual DbSet<Apothecary> Apothecaries { set; get; }
|
||||
public virtual DbSet<Recipe> Recipes { set; get; }
|
||||
public virtual DbSet<Medicine> Medicines { set; get; }
|
||||
public virtual DbSet<Prescription> Prescriptions { set; get; }
|
||||
public virtual DbSet<Patient> Patients { set; get; }
|
||||
public virtual DbSet<Procedure> Procedures { set; get; }
|
||||
public virtual DbSet<Treatment> Treatments { set; get; }
|
||||
public virtual DbSet<RecipeMedicine> RecipeMedicines { set; get; }
|
||||
public virtual DbSet<RecipeTreatment> RecipeTreatments { set; get; }
|
||||
public virtual DbSet<ProcedureMedicine> ProcedureMedicines { set; get; }
|
||||
public virtual DbSet<TreatmentProcedure> TreatmentProcedures { set; get; }
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\HospitalContracts\HospitalContracts.csproj" />
|
||||
<ProjectReference Include="..\HospitalDataModels\HospitalDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
@ -0,0 +1,88 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.SearchModels;
|
||||
using HospitalContracts.StorageContracts;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDatabaseImplement.Models;
|
||||
|
||||
namespace HospitalDatabaseImplement.Implements
|
||||
{
|
||||
public class ApothecaryStorage : IApothecaryStorage
|
||||
{
|
||||
public ApothecaryViewModel? GetElement(ApothecarySearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Login) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Apothecaries.FirstOrDefault(x =>
|
||||
(!string.IsNullOrEmpty(model.Login) && x.Login == model.Login) ||
|
||||
(model.Id.HasValue && x.Id == model.Id))
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
// TODO подумать над параметрами фильтрации
|
||||
public List<ApothecaryViewModel> GetFilteredList(ApothecarySearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Login) || string.IsNullOrEmpty(model.Password))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Apothecaries
|
||||
.Where(x => x.Login.Equals(model.Login) && x.Password.Equals(model.Password))
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
public List<ApothecaryViewModel> GetFullList()
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Apothecaries
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
public ApothecaryViewModel? Insert(ApothecaryBindingModel model)
|
||||
{
|
||||
var newUser = Apothecary.Create(model);
|
||||
if (newUser == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
context.Apothecaries.Add(newUser);
|
||||
context.SaveChanges();
|
||||
return newUser.GetViewModel;
|
||||
}
|
||||
|
||||
|
||||
public ApothecaryViewModel? Update(ApothecaryBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var user = context.Apothecaries.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (user == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
user.Update(model);
|
||||
context.SaveChanges();
|
||||
return user.GetViewModel;
|
||||
}
|
||||
|
||||
public ApothecaryViewModel? Delete(ApothecaryBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var user = context.Apothecaries.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (user != null)
|
||||
{
|
||||
context.Apothecaries.Remove(user);
|
||||
context.SaveChanges();
|
||||
return user.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.SearchModels;
|
||||
using HospitalContracts.StorageContracts;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace HospitalDatabaseImplement.Implements
|
||||
{
|
||||
public class MedicineStorage : IMedicineStorage
|
||||
{
|
||||
public MedicineViewModel? GetElement(MedicineSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Medicines.Include(x => x.Apothecary).FirstOrDefault(x =>
|
||||
(!string.IsNullOrEmpty(model.Name) && x.Name ==
|
||||
model.Name) ||
|
||||
(model.Id.HasValue && x.Id == model.Id))
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<MedicineViewModel> GetFilteredList(MedicineSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Medicines.Include(x => x.Apothecary)
|
||||
.Where(x => x.Name.Contains(model.Name))
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<MedicineViewModel> GetFullList()
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Medicines.Include(x => x.Apothecary)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public MedicineViewModel? Insert(MedicineBindingModel model)
|
||||
{
|
||||
var newElement = Medicine.Create(model);
|
||||
if (newElement == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
context.Medicines.Add(newElement);
|
||||
context.SaveChanges();
|
||||
return context.Medicines.Include(x => x.Apothecary).FirstOrDefault(x => x.Id == newElement.Id)?.GetViewModel;
|
||||
}
|
||||
|
||||
public MedicineViewModel? Update(MedicineBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Medicines.Include(x => x.Apothecary).FirstOrDefault(x => x.Id == model.Id);
|
||||
if (element == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
element.Update(model);
|
||||
context.SaveChanges();
|
||||
return context.Medicines.Include(x => x.Apothecary).FirstOrDefault(x => x.Id == element.Id)?.GetViewModel;
|
||||
}
|
||||
|
||||
public MedicineViewModel? Delete(MedicineBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Medicines.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Medicines.Remove(element);
|
||||
context.SaveChanges();
|
||||
return context.Medicines.Include(x => x.Apothecary).FirstOrDefault(x => x.Id == element.Id)?.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.SearchModels;
|
||||
using HospitalContracts.StorageContracts;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace HospitalDatabaseImplement.Implements
|
||||
{
|
||||
public class PatientStorage : IPatientStorage
|
||||
{
|
||||
public PatientViewModel? GetElement(PatientSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue || !model.TreatmentId.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Patients.Include(x => x.Treatment).FirstOrDefault(x =>
|
||||
(model.Id.HasValue && x.Id == model.Id) || (model.TreatmentId.HasValue && x.TreatmentId == model.TreatmentId))
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<PatientViewModel> GetFilteredList(PatientSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue || !model.TreatmentId.HasValue)
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Patients.Include(x => x.Treatment)
|
||||
.Where(x => (x.Id == model.Id) || (x.TreatmentId == model.TreatmentId))
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<PatientViewModel> GetFullList()
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Patients.Include(x => x.Treatment)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public PatientViewModel? Insert(PatientBindingModel model)
|
||||
{
|
||||
var newElement = Patient.Create(model);
|
||||
if (newElement == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
context.Patients.Add(newElement);
|
||||
context.SaveChanges();
|
||||
return context.Patients.Include(x => x.Treatment).FirstOrDefault(x => x.Id == newElement.Id)?.GetViewModel;
|
||||
}
|
||||
|
||||
public PatientViewModel? Update(PatientBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Patients.Include(x => x.Treatment).FirstOrDefault(x => x.Id == model.Id);
|
||||
if (element == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
element.Update(model);
|
||||
context.SaveChanges();
|
||||
return context.Patients.Include(x => x.Treatment).FirstOrDefault(x => x.Id == element.Id)?.GetViewModel;
|
||||
}
|
||||
|
||||
public PatientViewModel? Delete(PatientBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Patients.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Patients.Remove(element);
|
||||
context.SaveChanges();
|
||||
return context.Patients.Include(x => x.Treatment).FirstOrDefault(x => x.Id == element.Id)?.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.SearchModels;
|
||||
using HospitalContracts.StorageContracts;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
|
||||
namespace HospitalDatabaseImplement.Implements
|
||||
{
|
||||
public class PrescriptionStorage : IPrescriptionStorage
|
||||
{
|
||||
public PrescriptionViewModel? GetElement(PrescriptionSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Prescriptions.Include(x => x.Apothecary).Include(x=> x.Medicine).FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<PrescriptionViewModel> GetFilteredList(PrescriptionSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue || !model.ApothecaryId.HasValue)
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Prescriptions.Include(x => x.Apothecary).Include(x => x.Medicine)
|
||||
.Where(x => x.Id == model.Id || x.ApothecaryId == model.ApothecaryId)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<PrescriptionViewModel> GetFullList()
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Prescriptions.Include(x => x.Apothecary).Include(x => x.Medicine)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public PrescriptionViewModel? Insert(PrescriptionBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var newElement = Prescription.Create(model);
|
||||
if (newElement == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Prescriptions.Add(newElement);
|
||||
context.SaveChanges();
|
||||
return context.Prescriptions.Include(x => x.Apothecary).Include(x => x.Medicine).FirstOrDefault(x => x.Id == newElement.Id)?.GetViewModel;
|
||||
}
|
||||
|
||||
public PrescriptionViewModel? Update(PrescriptionBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Prescriptions.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (element == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
element.Update(model);
|
||||
context.SaveChanges();
|
||||
return context.Prescriptions.Include(x => x.Apothecary).Include(x => x.Medicine).FirstOrDefault(x => x.Id == element.Id)?.GetViewModel;
|
||||
}
|
||||
|
||||
public PrescriptionViewModel? Delete(PrescriptionBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Prescriptions.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Prescriptions.Remove(element);
|
||||
context.SaveChanges();
|
||||
return context.Prescriptions.Include(x => x.Apothecary).Include(x => x.Medicine).FirstOrDefault(x => x.Id == element.Id)?.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,104 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.SearchModels;
|
||||
using HospitalContracts.StorageContracts;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace HospitalDatabaseImplement.Implements
|
||||
{
|
||||
public class ProcedureStorage : IProcedureStorage
|
||||
{
|
||||
public ProcedureViewModel? GetElement(ProcedureSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Procedures.Include(x => x.Medicines).ThenInclude(x => x.Medicine).FirstOrDefault(x =>
|
||||
model.Id.HasValue && x.Id == model.Id)
|
||||
?.GetViewModel;
|
||||
}
|
||||
// TODO: подумать над параметрами фильтрации
|
||||
public List<ProcedureViewModel> GetFilteredList(ProcedureSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Procedures
|
||||
.Include(x => x.Medicines)
|
||||
.ThenInclude(x => x.Medicine)
|
||||
.Where(x => x.Name.Contains(model.Name))
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<ProcedureViewModel> GetFullList()
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Procedures
|
||||
.Include(x => x.Medicines)
|
||||
.ThenInclude(x => x.Medicine)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public ProcedureViewModel? Insert(ProcedureBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var newElement = Procedure.Create(context, model);
|
||||
if (newElement == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Procedures.Add(newElement);
|
||||
context.SaveChanges();
|
||||
return newElement.GetViewModel;
|
||||
}
|
||||
|
||||
public ProcedureViewModel? Update(ProcedureBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var element = context.Procedures.FirstOrDefault(rec =>
|
||||
rec.Id == model.Id);
|
||||
if (element == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
element.Update(model);
|
||||
context.SaveChanges();
|
||||
element.UpdateMedicines(context, model);
|
||||
transaction.Commit();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public ProcedureViewModel? Delete(ProcedureBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Procedures.Include(x => x.Medicines)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Procedures.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
116
Hospital/HospitalDatabaseImplement/Implements/RecipeStorage.cs
Normal file
116
Hospital/HospitalDatabaseImplement/Implements/RecipeStorage.cs
Normal file
@ -0,0 +1,116 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.SearchModels;
|
||||
using HospitalContracts.StorageContracts;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace HospitalDatabaseImplement.Implements
|
||||
{
|
||||
public class RecipeStorage : IRecipeStorage
|
||||
{
|
||||
public RecipeViewModel? GetElement(RecipeSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) &&
|
||||
!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Recipes
|
||||
.Include(x => x.Apothecary)
|
||||
.Include(x => x.Treatments)
|
||||
.ThenInclude(x => x.Treatment)
|
||||
.Include(x => x.Medicines)
|
||||
.ThenInclude(x => x.Medicine)
|
||||
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) &&
|
||||
x.Name == model.Name) || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<RecipeViewModel> GetFilteredList(RecipeSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) || !model.ApothecaryId.HasValue)
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Recipes.Include(x => x.Apothecary)
|
||||
.Include(x => x.Treatments)
|
||||
.ThenInclude(x => x.Treatment)
|
||||
.Include(x => x.Medicines)
|
||||
.ThenInclude(x => x.Medicine)
|
||||
.Where(x => x.Name.Contains(model.Name) || x.ApothecaryId == model.ApothecaryId)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<RecipeViewModel> GetFullList()
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Recipes.Include(x => x.Apothecary)
|
||||
.Include(x => x.Treatments)
|
||||
.ThenInclude(x => x.Treatment)
|
||||
.Include(x => x.Medicines)
|
||||
.ThenInclude(x => x.Medicine)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public RecipeViewModel? Insert(RecipeBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var newElement = Recipe.Create(context, model);
|
||||
if (newElement == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Recipes.Add(newElement);
|
||||
context.SaveChanges();
|
||||
return newElement.GetViewModel;
|
||||
}
|
||||
|
||||
public RecipeViewModel? Update(RecipeBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var element = context.Recipes.FirstOrDefault(rec =>
|
||||
rec.Id == model.Id);
|
||||
if (element == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
element.Update(model);
|
||||
context.SaveChanges();
|
||||
element.UpdateMedicines(context, model);
|
||||
element.UpdateTreatments(context, model);
|
||||
transaction.Commit();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public RecipeViewModel? Delete(RecipeBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Recipes
|
||||
.Include(x => x.Medicines)
|
||||
.Include(x => x.Treatments)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Recipes.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,109 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.SearchModels;
|
||||
using HospitalContracts.StorageContracts;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace HospitalDatabaseImplement.Implements
|
||||
{
|
||||
public class TreatmentStorage : ITreatmentStorage
|
||||
{
|
||||
public TreatmentViewModel? GetElement(TreatmentSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Treatments
|
||||
.Include(x => x.Patients) // TODO: проверить, как такое работает - нужно для получения списка пациентов по лекарству
|
||||
.Include(x => x.Procedures)
|
||||
.ThenInclude(x => x.Procedure)
|
||||
.FirstOrDefault(x =>
|
||||
(!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) ||
|
||||
(model.Id.HasValue && x.Id == model.Id))
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<TreatmentViewModel> GetFilteredList(TreatmentSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Treatments
|
||||
.Include(x => x.Patients)
|
||||
.Include(x => x.Procedures)
|
||||
.ThenInclude(x => x.Procedure)
|
||||
.Where(x => x.Name.Contains(model.Name))
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<TreatmentViewModel> GetFullList()
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
return context.Treatments
|
||||
.Include(x => x.Patients)
|
||||
.Include(x => x.Procedures)
|
||||
.ThenInclude(x => x.Procedure)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public TreatmentViewModel? Insert(TreatmentBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var newElement = Treatment.Create(context, model);
|
||||
if (newElement == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Treatments.Add(newElement);
|
||||
context.SaveChanges();
|
||||
return context.Treatments.Include(x => x.Patients).FirstOrDefault(x => x.Id == newElement.Id)?.GetViewModel;
|
||||
}
|
||||
|
||||
public TreatmentViewModel? Update(TreatmentBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var element = context.Treatments.FirstOrDefault(rec =>
|
||||
rec.Id == model.Id);
|
||||
if (element == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
element.Update(model);
|
||||
context.SaveChanges();
|
||||
element.UpdateProcedures(context, model);
|
||||
transaction.Commit();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public TreatmentViewModel? Delete(TreatmentBindingModel model)
|
||||
{
|
||||
using var context = new HospitalDatabase();
|
||||
var element = context.Treatments
|
||||
.Include(x => x.Procedures)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Treatments.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
49
Hospital/HospitalDatabaseImplement/Models/Apothecary.cs
Normal file
49
Hospital/HospitalDatabaseImplement/Models/Apothecary.cs
Normal file
@ -0,0 +1,49 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDataModels.Models;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class Apothecary : IApothecaryModel
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Login { get; private set; } = string.Empty;
|
||||
[Required]
|
||||
[MaxLength(55)]
|
||||
public string Password { get; private set; } = string.Empty;
|
||||
|
||||
public static Apothecary? Create(ApothecaryBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Apothecary()
|
||||
{
|
||||
Id = model.Id,
|
||||
Login = model.Login,
|
||||
Password = model.Password
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(ApothecaryBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Login = model.Login;
|
||||
Password = model.Password;
|
||||
}
|
||||
public ApothecaryViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Login = Login,
|
||||
Password = Password
|
||||
};
|
||||
}
|
||||
}
|
75
Hospital/HospitalDatabaseImplement/Models/Medicine.cs
Normal file
75
Hospital/HospitalDatabaseImplement/Models/Medicine.cs
Normal file
@ -0,0 +1,75 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDataModels.Models;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class Medicine : IMedicineModel
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(60)]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public double Cost { get; private set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(10)]
|
||||
public string Dose { get; private set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public int ApothecaryId { get; private set; }
|
||||
|
||||
public virtual Apothecary Apothecary { get; set; }
|
||||
|
||||
[ForeignKey("MedicineId")]
|
||||
public virtual List<Prescription> Prescriptions { get; set; } = new();
|
||||
|
||||
[ForeignKey("MedicineId")]
|
||||
public virtual List<RecipeMedicine> Recipes { get; set; } = new();
|
||||
|
||||
[ForeignKey("MedicineId")]
|
||||
public virtual List<ProcedureMedicine> Procedures { get; set; } = new();
|
||||
|
||||
public static Medicine? Create(MedicineBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Medicine()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Cost = model.Cost,
|
||||
Dose = model.Dose,
|
||||
ApothecaryId = model.ApothecaryId
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(MedicineBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Name = model.Name;
|
||||
Cost = model.Cost;
|
||||
Dose = model.Dose;
|
||||
}
|
||||
public MedicineViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
Cost = Cost,
|
||||
Dose = Dose,
|
||||
ApothecaryId = ApothecaryId,
|
||||
ApothecaryLogin = Apothecary.Login
|
||||
};
|
||||
}
|
||||
}
|
82
Hospital/HospitalDatabaseImplement/Models/Patient.cs
Normal file
82
Hospital/HospitalDatabaseImplement/Models/Patient.cs
Normal file
@ -0,0 +1,82 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
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; private set; }
|
||||
|
||||
public string Surname { get; private set; } = string.Empty;
|
||||
[Required]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
|
||||
public string Patronymic { get; private set; } = string.Empty;
|
||||
[Required]
|
||||
public DateTime BirthDate { get; private set; }
|
||||
|
||||
public int TreatmentId { get; private set; }
|
||||
public virtual Treatment? Treatment { get; set; }
|
||||
|
||||
public static Patient? Create(PatientBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Patient()
|
||||
{
|
||||
Id = model.Id,
|
||||
Surname = model.Surname,
|
||||
Name = model.Name,
|
||||
Patronymic = model.Patronymic,
|
||||
BirthDate = model.BirthDate,
|
||||
TreatmentId = model.TreatmentId
|
||||
};
|
||||
}
|
||||
|
||||
public static Patient Create(PatientViewModel model)
|
||||
{
|
||||
return new Patient
|
||||
{
|
||||
Id = model.Id,
|
||||
Surname = model.Surname,
|
||||
Name = model.Name,
|
||||
Patronymic = model.Patronymic,
|
||||
BirthDate = model.BirthDate,
|
||||
TreatmentId = model.TreatmentId
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(PatientBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Surname = model.Surname;
|
||||
Name = model.Name;
|
||||
Patronymic = model.Patronymic;
|
||||
BirthDate = model.BirthDate;
|
||||
TreatmentId = model.TreatmentId;
|
||||
}
|
||||
public PatientViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Surname = Surname,
|
||||
Name = Name,
|
||||
Patronymic = Patronymic,
|
||||
BirthDate = BirthDate,
|
||||
TreatmentId = TreatmentId,
|
||||
TreatmentName = Treatment?.Name
|
||||
};
|
||||
}
|
||||
}
|
56
Hospital/HospitalDatabaseImplement/Models/Prescription.cs
Normal file
56
Hospital/HospitalDatabaseImplement/Models/Prescription.cs
Normal file
@ -0,0 +1,56 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class Prescription : IPrescriptionModel
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[Required]
|
||||
public DateTime Date { get; private set; } = DateTime.Now;
|
||||
[Required]
|
||||
public int Number { get; private set; }
|
||||
[Required]
|
||||
public int MedicineId { get; private set; }
|
||||
|
||||
public virtual Medicine Medicine { get; set; }
|
||||
[Required]
|
||||
public int ApothecaryId { get; private set; }
|
||||
|
||||
public virtual Apothecary Apothecary { get; set; }
|
||||
|
||||
public static Prescription Create(PrescriptionBindingModel model)
|
||||
{
|
||||
return new Prescription()
|
||||
{
|
||||
Id = model.Id,
|
||||
Date = model.Date,
|
||||
Number = model.Number,
|
||||
MedicineId = model.MedicineId,
|
||||
ApothecaryId = model.ApothecaryId
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(PrescriptionBindingModel model)
|
||||
{
|
||||
Date = model.Date;
|
||||
}
|
||||
public PrescriptionViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Date = Date,
|
||||
Number = Number,
|
||||
MedicineId = MedicineId,
|
||||
MedicineName = Medicine.Name,
|
||||
ApothecaryId = ApothecaryId,
|
||||
ApothecaryLogin = Apothecary.Login
|
||||
};
|
||||
}
|
||||
}
|
88
Hospital/HospitalDatabaseImplement/Models/Procedure.cs
Normal file
88
Hospital/HospitalDatabaseImplement/Models/Procedure.cs
Normal file
@ -0,0 +1,88 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class Procedure : IProcedureModel
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
|
||||
private Dictionary<int, IMedicineModel>? _procedureMedicines = null;
|
||||
|
||||
[NotMapped]
|
||||
public Dictionary<int, IMedicineModel> ProcedureMedicines { get
|
||||
{
|
||||
if (_procedureMedicines == null)
|
||||
{
|
||||
_procedureMedicines = Medicines.ToDictionary(rec => rec.MedicineId, rec =>
|
||||
rec.Medicine as IMedicineModel);
|
||||
}
|
||||
return _procedureMedicines;
|
||||
}
|
||||
}
|
||||
|
||||
[ForeignKey("ProcedureId")]
|
||||
public virtual List<ProcedureMedicine> Medicines { get; set; } = new();
|
||||
|
||||
[ForeignKey("ProcedureId")]
|
||||
public virtual List<TreatmentProcedure> Treatments { get; set; } = new();
|
||||
|
||||
public static Procedure Create(HospitalDatabase context, ProcedureBindingModel model)
|
||||
{
|
||||
return new Procedure()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Medicines = model.ProcedureMedicines.Select(x => new ProcedureMedicine
|
||||
{
|
||||
Medicine = context.Medicines.First(y => y.Id == x.Key),
|
||||
}).ToList()
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(ProcedureBindingModel model)
|
||||
{
|
||||
Name = model.Name;
|
||||
}
|
||||
|
||||
public ProcedureViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name
|
||||
};
|
||||
|
||||
public void UpdateMedicines(HospitalDatabase context, ProcedureBindingModel model)
|
||||
{
|
||||
var procedureMedicines = context.ProcedureMedicines.Where(rec => rec.ProcedureId == model.Id).ToList();
|
||||
if (procedureMedicines != null && procedureMedicines.Count > 0)
|
||||
{
|
||||
context.ProcedureMedicines.RemoveRange(procedureMedicines.Where(rec
|
||||
=> !model.ProcedureMedicines.ContainsKey(rec.MedicineId)));
|
||||
context.SaveChanges();
|
||||
}
|
||||
var procedure = context.Procedures.First(x => x.Id == Id);
|
||||
foreach (var pm in model.ProcedureMedicines)
|
||||
{
|
||||
context.ProcedureMedicines.Add(new ProcedureMedicine
|
||||
{
|
||||
Procedure = procedure,
|
||||
Medicine = context.Medicines.First(x => x.Id == pm.Key),
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_procedureMedicines = null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class ProcedureMedicine
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[Required]
|
||||
public int ProcedureId { get; set; }
|
||||
[Required]
|
||||
public int MedicineId { get; set; }
|
||||
public virtual Procedure Procedure { get; set; } = new();
|
||||
public virtual Medicine Medicine { get; set; } = new();
|
||||
}
|
||||
}
|
140
Hospital/HospitalDatabaseImplement/Models/Recipe.cs
Normal file
140
Hospital/HospitalDatabaseImplement/Models/Recipe.cs
Normal file
@ -0,0 +1,140 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDataModels.Models;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class Recipe : IRecipeModel
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
[Required]
|
||||
public DateTime Date { get; private set; } = DateTime.Now;
|
||||
[Required]
|
||||
public int ApothecaryId { get; private set; }
|
||||
|
||||
public virtual Apothecary Apothecary { get; set; }
|
||||
|
||||
private Dictionary<int, IMedicineModel>? _recipeMedicines = null;
|
||||
|
||||
[NotMapped]
|
||||
public Dictionary<int, IMedicineModel> RecipeMedicines
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_recipeMedicines == null)
|
||||
{
|
||||
_recipeMedicines = Medicines
|
||||
.ToDictionary(rec => rec.MedicineId, rec =>
|
||||
rec.Medicine as IMedicineModel);
|
||||
}
|
||||
return _recipeMedicines;
|
||||
}
|
||||
}
|
||||
|
||||
[ForeignKey("RecipeId")]
|
||||
public virtual List<RecipeMedicine> Medicines { get; set; } = new();
|
||||
|
||||
private Dictionary<int, ITreatmentModel>? _recipeTreatments = null;
|
||||
|
||||
[NotMapped]
|
||||
public Dictionary<int, ITreatmentModel> RecipeTreatments
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_recipeTreatments == null)
|
||||
{
|
||||
_recipeTreatments = Treatments
|
||||
.ToDictionary(rec => rec.TreatmentId, rec =>
|
||||
rec.Treatment as ITreatmentModel);
|
||||
}
|
||||
return _recipeTreatments;
|
||||
}
|
||||
}
|
||||
[ForeignKey("RecipeId")]
|
||||
public virtual List<RecipeTreatment> Treatments { get; set; } = new();
|
||||
|
||||
public static Recipe Create(HospitalDatabase context, RecipeBindingModel model)
|
||||
{
|
||||
return new Recipe()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Date = model.Date,
|
||||
ApothecaryId = model.ApothecaryId,
|
||||
Medicines = model.RecipeMedicines.Select(x => new RecipeMedicine
|
||||
{
|
||||
Medicine = context.Medicines.First(y => y.Id == x.Key),
|
||||
}).ToList(),
|
||||
Treatments = model.RecipeTreatments.Select(x => new RecipeTreatment
|
||||
{
|
||||
Treatment = context.Treatments.First(y => y.Id == x.Key)
|
||||
}
|
||||
).ToList()
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(RecipeBindingModel model)
|
||||
{
|
||||
Name = model.Name;
|
||||
Date = model.Date;
|
||||
}
|
||||
public RecipeViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
Date = Date,
|
||||
ApothecaryId = ApothecaryId,
|
||||
ApothecaryLogin = Apothecary.Login
|
||||
};
|
||||
|
||||
public void UpdateMedicines(HospitalDatabase context, RecipeBindingModel model)
|
||||
{
|
||||
var recipeMedicines = context.RecipeMedicines.Where(rec => rec.RecipeId == model.Id).ToList();
|
||||
if (recipeMedicines != null && recipeMedicines.Count > 0)
|
||||
{
|
||||
context.RecipeMedicines.RemoveRange(recipeMedicines.Where(rec
|
||||
=> !model.RecipeMedicines.ContainsKey(rec.MedicineId)));
|
||||
context.SaveChanges();
|
||||
}
|
||||
var recipe = context.Recipes.First(x => x.Id == Id);
|
||||
foreach (var rec in model.RecipeMedicines)
|
||||
{
|
||||
context.RecipeMedicines.Add(new RecipeMedicine
|
||||
{
|
||||
Recipe = recipe,
|
||||
Medicine = context.Medicines.First(x => x.Id == rec.Key),
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_recipeMedicines = null;
|
||||
}
|
||||
|
||||
public void UpdateTreatments(HospitalDatabase context, RecipeBindingModel model)
|
||||
{
|
||||
var recipeTreatments = context.RecipeTreatments.Where(rec => rec.RecipeId == model.Id).ToList();
|
||||
if (recipeTreatments != null && recipeTreatments.Count > 0)
|
||||
{
|
||||
context.RecipeTreatments.RemoveRange(recipeTreatments.Where(rec
|
||||
=> !model.RecipeTreatments.ContainsKey(rec.TreatmentId)));
|
||||
context.SaveChanges();
|
||||
}
|
||||
var recipe = context.Recipes.First(x => x.Id == Id);
|
||||
foreach (var rec in model.RecipeTreatments)
|
||||
{
|
||||
context.RecipeTreatments.Add(new RecipeTreatment
|
||||
{
|
||||
Recipe = recipe,
|
||||
Treatment = context.Treatments.First(x => x.Id == rec.Key),
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_recipeTreatments = null;
|
||||
}
|
||||
}
|
||||
}
|
16
Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs
Normal file
16
Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class RecipeMedicine
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[Required]
|
||||
public int RecipeId { get; set; }
|
||||
[Required]
|
||||
public int MedicineId { get; set; }
|
||||
public virtual Recipe Recipe { get; set; } = new();
|
||||
public virtual Medicine Medicine { get; set; } = new();
|
||||
}
|
||||
}
|
20
Hospital/HospitalDatabaseImplement/Models/RecipeTreatment.cs
Normal file
20
Hospital/HospitalDatabaseImplement/Models/RecipeTreatment.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class RecipeTreatment
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[Required]
|
||||
public int RecipeId { get; set; }
|
||||
[Required]
|
||||
public int TreatmentId { get; set; }
|
||||
public virtual Recipe Recipe { get; set; } = new();
|
||||
public virtual Treatment Treatment { get; set; } = new();
|
||||
}
|
||||
}
|
89
Hospital/HospitalDatabaseImplement/Models/Treatment.cs
Normal file
89
Hospital/HospitalDatabaseImplement/Models/Treatment.cs
Normal file
@ -0,0 +1,89 @@
|
||||
using HospitalContracts.BindingModels;
|
||||
using HospitalContracts.ViewModels;
|
||||
using HospitalDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class Treatment : ITreatmentModel
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[Required]
|
||||
[MaxLength(55)]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
|
||||
private Dictionary<int, IProcedureModel>? _treatmentProcedures = null;
|
||||
[NotMapped]
|
||||
public Dictionary<int, IProcedureModel> TreatmentProcedures {
|
||||
get
|
||||
{
|
||||
if (_treatmentProcedures == null)
|
||||
{
|
||||
_treatmentProcedures = Procedures
|
||||
.ToDictionary(rec => rec.ProcedureId, rec =>
|
||||
rec.Procedure as IProcedureModel);
|
||||
}
|
||||
return _treatmentProcedures;
|
||||
}
|
||||
}
|
||||
[ForeignKey("TreatmentId")]
|
||||
public virtual List<Patient> Patients { get; set; } = new();
|
||||
|
||||
[ForeignKey("TreatmentId")]
|
||||
public virtual List<TreatmentProcedure> Procedures { get; set; } = new();
|
||||
|
||||
[ForeignKey("TreatmentId")]
|
||||
public virtual List<RecipeTreatment> Recipes { get; set; } = new();
|
||||
|
||||
public static Treatment Create(HospitalDatabase context, TreatmentBindingModel model)
|
||||
{
|
||||
return new Treatment()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Procedures = model.TreatmentProcedures.Select(x => new TreatmentProcedure
|
||||
{
|
||||
Procedure = context.Procedures.First(y => y.Id == x.Key),
|
||||
}).ToList()
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(TreatmentBindingModel model)
|
||||
{
|
||||
Name = model.Name;
|
||||
}
|
||||
public TreatmentViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name
|
||||
};
|
||||
|
||||
public void UpdateProcedures(HospitalDatabase context, TreatmentBindingModel model)
|
||||
{
|
||||
var treatmentProcedures = context.TreatmentProcedures.Where(rec => rec.TreatmentId == model.Id).ToList();
|
||||
if (treatmentProcedures != null && treatmentProcedures.Count > 0)
|
||||
{
|
||||
context.TreatmentProcedures.RemoveRange(treatmentProcedures.Where(rec
|
||||
=> !model.TreatmentProcedures.ContainsKey(rec.ProcedureId)));
|
||||
context.SaveChanges();
|
||||
}
|
||||
var treatment = context.Treatments.First(x => x.Id == Id);
|
||||
foreach (var pc in model.TreatmentProcedures)
|
||||
{
|
||||
context.TreatmentProcedures.Add(new TreatmentProcedure
|
||||
{
|
||||
Treatment = treatment,
|
||||
Procedure = context.Procedures.First(x => x.Id == pc.Key),
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_treatmentProcedures = null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HospitalDatabaseImplement.Models
|
||||
{
|
||||
public class TreatmentProcedure
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[Required]
|
||||
public int ProcedureId { get; set; }
|
||||
[Required]
|
||||
public int TreatmentId { get; set; }
|
||||
public virtual Procedure Procedure { get; set; } = new();
|
||||
public virtual Treatment Treatment { get; set; } = new();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user