diff --git a/Polyclinic/PolyclinicDatabaseImplement/Implements/ProcedureStorage.cs b/Polyclinic/PolyclinicDatabaseImplement/Implements/ProcedureStorage.cs index 0930c6a..43f51f6 100644 --- a/Polyclinic/PolyclinicDatabaseImplement/Implements/ProcedureStorage.cs +++ b/Polyclinic/PolyclinicDatabaseImplement/Implements/ProcedureStorage.cs @@ -1,4 +1,10 @@ -using PolyclinicContracts.StoragesContracts; +using Microsoft.EntityFrameworkCore; +using PolyclinicContracts.BindingModels; +using PolyclinicContracts.SearchModels; +using PolyclinicContracts.StoragesContracts; +using PolyclinicContracts.ViewModels; +using PolyclinicDatabaseImplement.Models; +using SecuritySystemDatabaseImplement; using System; using System.Collections.Generic; using System.Linq; @@ -9,5 +15,95 @@ namespace PolyclinicDatabaseImplement.Implements { public class ProcedureStorage : IProcedureStorage { + public List GetFullList() + { + using var database = new PolyclinicDatabase(); + return database.Procedures + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(ProcedureSearchModel model) + { + if (string.IsNullOrEmpty(model.Name)) + { + return new(); + } + using var database = new PolyclinicDatabase(); + return database.Procedures + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .Where(x => x.Name == model.Name) + .Select(x => x.GetViewModel) + .ToList(); + } + + public ProcedureViewModel? GetElement(ProcedureSearchModel model) + { + if (string.IsNullOrEmpty(model.Name) && + !model.Id.HasValue) + { + return null; + } + using var database = new PolyclinicDatabase(); + return database.Procedures + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) || + (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; + } + + public ProcedureViewModel? Insert(ProcedureBindingModel model) + { + using var database = new PolyclinicDatabase(); + var newProcedure = Procedure.Create(database, model); + if (newProcedure == null) + { + return null; + } + database.Procedures.Add(newProcedure); + database.SaveChanges(); + return newProcedure.GetViewModel; + } + public ProcedureViewModel? Update(ProcedureBindingModel model) + { + using var database = new PolyclinicDatabase(); + using var transaction = database.Database.BeginTransaction(); + try + { + var Procedure = database.Procedures.FirstOrDefault(rec => rec.Id == model.Id); + if (Procedure == null) + { + return null; + } + Procedure.Update(model); + database.SaveChanges(); + Procedure.UpdateRecipes(database, model); + transaction.Commit(); + return Procedure.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + public ProcedureViewModel? Delete(ProcedureBindingModel model) + { + using var database = new PolyclinicDatabase(); + var element = database.Procedures + .Include(x => x.Recipes) + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + database.Procedures.Remove(element); + database.SaveChanges(); + return element.GetViewModel; + } + return null; + } } } diff --git a/Polyclinic/PolyclinicDatabaseImplement/Implements/RecipeStorage.cs b/Polyclinic/PolyclinicDatabaseImplement/Implements/RecipeStorage.cs index 1ee027d..c9d0583 100644 --- a/Polyclinic/PolyclinicDatabaseImplement/Implements/RecipeStorage.cs +++ b/Polyclinic/PolyclinicDatabaseImplement/Implements/RecipeStorage.cs @@ -1,15 +1,9 @@ -using Microsoft.EntityFrameworkCore; -using PolyclinicContracts.BindingModels; +using PolyclinicContracts.BindingModels; using PolyclinicContracts.SearchModels; using PolyclinicContracts.StoragesContracts; using PolyclinicContracts.ViewModels; using PolyclinicDatabaseImplement.Models; using SecuritySystemDatabaseImplement; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace PolyclinicDatabaseImplement.Implements { @@ -41,7 +35,7 @@ namespace PolyclinicDatabaseImplement.Implements x.Comment == bindingModel.Comment) || (bindingModel.Id.HasValue && x.Id == bindingModel.Id))?.GetViewModel; } - public RecipeViewModel Insert(RecipeBindingModel bindingModel) + public RecipeViewModel? Insert(RecipeBindingModel bindingModel) { using var database = new PolyclinicDatabase(); var newRecipe = Recipe.Create(bindingModel);