diff --git a/HardwareShop/HardwareShopDatabaseImplement/Implements/IUserStorage.cs b/HardwareShop/HardwareShopDatabaseImplement/Implements/IUserStorage.cs deleted file mode 100644 index c04f7fc..0000000 --- a/HardwareShop/HardwareShopDatabaseImplement/Implements/IUserStorage.cs +++ /dev/null @@ -1,39 +0,0 @@ -using HardwareShopContracts.BindingModels; -using HardwareShopContracts.SearchModels; -using HardwareShopContracts.ViewModels; - -namespace HardwareShopContracts.StoragesContracts -{ - public class UserStorage : IUserStorage - { - public UserViewModel? Delete(UserBindingModel model) - { - throw new NotImplementedException(); - } - - public UserViewModel? GetElement(UserSearchModel model) - { - throw new NotImplementedException(); - } - - public List GetFilteredList(UserSearchModel model) - { - throw new NotImplementedException(); - } - - public List GetFullList() - { - throw new NotImplementedException(); - } - - public UserViewModel? Insert(UserBindingModel model) - { - throw new NotImplementedException(); - } - - public UserViewModel? Update(UserBindingModel model) - { - throw new NotImplementedException(); - } - } -} \ No newline at end of file diff --git a/HardwareShop/HardwareShopDatabaseImplement/Implements/UserStorage.cs b/HardwareShop/HardwareShopDatabaseImplement/Implements/UserStorage.cs new file mode 100644 index 0000000..0240de6 --- /dev/null +++ b/HardwareShop/HardwareShopDatabaseImplement/Implements/UserStorage.cs @@ -0,0 +1,92 @@ +using HardwareShopContracts.BindingModels; +using HardwareShopContracts.SearchModels; +using HardwareShopContracts.StoragesContracts; +using HardwareShopContracts.ViewModels; +using HardwareShopDatabaseImplement.Models; + +namespace HardwareShopDatabaseImplement.Implements +{ + public class UserStorage : IUserStorage + { + public UserViewModel? Delete(UserBindingModel model) + { + using var context = new HardwareShopDatabase(); + var element = context.Users + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + context.Users.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + + public UserViewModel? GetElement(UserSearchModel model) + { + using var context = new HardwareShopDatabase(); + if (model.Id.HasValue) + return context.Users + .FirstOrDefault(x => x.Id == model.Id)? + .GetViewModel; + if (!string.IsNullOrEmpty(model.Email) && !string.IsNullOrEmpty(model.Password)) + return context.Users + .FirstOrDefault(x => x.Email + .Equals(model.Email) && x.Password + .Equals(model.Password))? + .GetViewModel; + if (!string.IsNullOrEmpty(model.Email)) + return context.Users + .FirstOrDefault(x => x.Email.Equals(model.Email))?.GetViewModel; + return null; + } + + public List GetFilteredList(UserSearchModel model) + { + if (string.IsNullOrEmpty(model.Login)) + { + return new(); + } + using var context = new HardwareShopDatabase(); + return context.Users + .Where(x => x.Login.Contains(model.Login)) + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFullList() + { + using var context = new HardwareShopDatabase(); + return context.Users + .Select(x => x.GetViewModel) + .ToList(); + } + + public UserViewModel? Insert(UserBindingModel model) + { + var newUser = User.Create(model); + if (newUser == null) + { + return null; + } + using var context = new HardwareShopDatabase(); + context.Users.Add(newUser); + context.SaveChanges(); + return newUser.GetViewModel; + } + + public UserViewModel? Update(UserBindingModel model) + { + using var context = new HardwareShopDatabase(); + var user = context.Users + .FirstOrDefault(x => x.Id == model.Id); + if (user == null) + { + return null; + } + user.Update(model); + context.SaveChanges(); + return user.GetViewModel; + } + } +} \ No newline at end of file diff --git a/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/BuildStorage.cs b/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/BuildStorage.cs index 10e0f11..ce43dae 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/BuildStorage.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/BuildStorage.cs @@ -1,11 +1,11 @@ using HardwareShopContracts.BindingModels; using HardwareShopContracts.SearchModels; +using HardwareShopContracts.StoragesContracts; using HardwareShopContracts.ViewModels; -using HardwareShopDatabaseImplement; using HardwareShopDatabaseImplement.Models.Worker; using Microsoft.EntityFrameworkCore; -namespace HardwareShopContracts.StoragesContracts +namespace HardwareShopDatabaseImplement.Implements.Worker { public class BuildStorage : IBuildStorage { diff --git a/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/CommentStorage.cs b/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/CommentStorage.cs index 2f92b6f..84d61a9 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/CommentStorage.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/CommentStorage.cs @@ -1,11 +1,11 @@ using HardwareShopContracts.BindingModels; using HardwareShopContracts.SearchModels; +using HardwareShopContracts.StoragesContracts; using HardwareShopContracts.ViewModels; -using HardwareShopDatabaseImplement; using HardwareShopDatabaseImplement.Models.Worker; using Microsoft.EntityFrameworkCore; -namespace HardwareShopContracts.StoragesContracts +namespace HardwareShopDatabaseImplement.Implements.Worker { public class CommentStorage : ICommentStorage { diff --git a/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/PurchaseStorage.cs b/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/PurchaseStorage.cs index 562c24e..428a796 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/PurchaseStorage.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Implements/Worker/PurchaseStorage.cs @@ -1,12 +1,11 @@ using HardwareShopContracts.BindingModels; using HardwareShopContracts.SearchModels; +using HardwareShopContracts.StoragesContracts; using HardwareShopContracts.ViewModels; -using HardwareShopDatabaseImplement; -using HardwareShopDatabaseImplement.Models.Storekeeper; using HardwareShopDatabaseImplement.Models.Worker; using Microsoft.EntityFrameworkCore; -namespace HardwareShopContracts.StoragesContracts +namespace HardwareShopDatabaseImplement.Implements.Worker { public class PurchaseStorage : IPurchaseStorage {