using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.SearchModels; using SecuritySystemContracts.StoragesContracts; using SecuritySystemContracts.ViewModels; using SecuritySystemDatabaseImplement.Models; namespace SecuritySystemDatabaseImplement.Implements { public class SecureStorage : ISecureStorage { public List GetFullList() { using var context = new SecuritySystemDatabase(); return context.Secures .Include(x => x.Components) .ThenInclude(x => x.Component) .Select(x => x.GetViewModel) .ToList(); } public List GetFilteredList(SecureSearchModel model) { var secures = GetFullList(); if (model.Id != null) { secures = secures.Where(x => x.Id == model.Id).ToList(); } if (!model.SecureName.IsNullOrEmpty()) { secures = secures.Where(x => x.SecureName == model.SecureName).ToList(); } return secures; } public SecureViewModel? GetElement(SecureSearchModel model) { return GetFilteredList(model).FirstOrDefault(); } public SecureViewModel? Insert(SecureBindingModel model) { using var context = new SecuritySystemDatabase(); var newSecure = Secure.Create(context, model); if (newSecure == null) { return null; } context.Secures.Add(newSecure); context.SaveChanges(); return newSecure.GetViewModel; } public SecureViewModel? Update(SecureBindingModel model) { using var context = new SecuritySystemDatabase(); using var transaction = context.Database.BeginTransaction(); try { var secure = context.Secures.FirstOrDefault(rec => rec.Id == model.Id); if (secure == null) { return null; } secure.Update(model); context.SaveChanges(); secure.UpdateComponents(context, model); transaction.Commit(); return secure.GetViewModel; } catch { transaction.Rollback(); throw; } } public SecureViewModel? Delete(SecureBindingModel model) { using var context = new SecuritySystemDatabase(); var element = context.Secures .Include(x => x.Components) .FirstOrDefault(rec => rec.Id == model.Id); if (element != null) { context.Secures.Remove(element); context.SaveChanges(); return element.GetViewModel; } return null; } } }