diff --git a/HardwareShop/HardwareShopDatabaseImplement/HardwareShopDatabase.cs b/HardwareShop/HardwareShopDatabaseImplement/HardwareShopDatabase.cs index 2529716..ef5e47a 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/HardwareShopDatabase.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/HardwareShopDatabase.cs @@ -23,6 +23,8 @@ namespace HardwareShopDatabaseImplement public virtual DbSet Builds { set; get; } + public virtual DbSet BuildsComponents { set; get; } + public virtual DbSet Comments { set; get; } public virtual DbSet Components { set; get; } diff --git a/HardwareShop/HardwareShopDatabaseImplement/Models/Build.cs b/HardwareShop/HardwareShopDatabaseImplement/Models/Build.cs index 61d17b0..3132f6d 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Models/Build.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Models/Build.cs @@ -1,4 +1,6 @@ -using HardwareShopDataModels.Models; +using HardwareShopContracts.BindingModels; +using HardwareShopContracts.ViewModels; +using HardwareShopDataModels.Models; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; @@ -18,6 +20,8 @@ namespace HardwareShopDatabaseImplement.Models [Required] public int UserID { get; set; } + public virtual User User { get; set; } + [ForeignKey("BuildId")] public virtual List? Components { get; set; } @@ -42,64 +46,67 @@ namespace HardwareShopDatabaseImplement.Models } } - //public static Build Create(HardwareShopDatabase context, BuildBindingModel model) - //{ - // return new Build() - // { - // Id = model.Id, - // BuildName = model.BuildName, - // Price = model.Price, - // Components = model.BuildComponents.Select(x => new BuildComponent - // { - // Component = context.Components.First(y => y.Id == x.Key), - // Count = x.Value.Item2 - // }).ToList() - // }; - //} + public static Build Create(HardwareShopDatabase context, BuildBindingModel model) + { + return new Build() + { + Id = model.Id, + Price = model.Price, + BuildName = model.BuildName, + UserID = model.UserID, + Components = model.BuildComponents.Select(x => new BuildComponent + { + Component = context.Components.First(y => y.Id == x.Key), + Count = x.Value.Item2 + }).ToList() + }; + } - //public void Update(BuildBindingModel model) - //{ - // BuildName = model.BuildName; - // Price = model.Price; - //} + public void Update(BuildBindingModel model) + { + BuildName = model.BuildName; + Price = model.Price; + } - //public BuildViewModel GetViewModel => new() - //{ - // Id = Id, - // BuildName = BuildName, - // Price = Price, - // BuildComponents = BuildComponents - //}; + public BuildViewModel GetViewModel => new() + { + Id = Id, + BuildName = BuildName, + Price = Price, + UserEmail = User.Email, + UserID = UserID, + BuildComponents = BuildComponents + }; - //public void UpdateComponents(HardwareShopDatabase context, BuildBindingModel model) - //{ - // var buildComponents = context.BuildComponents.Where(rec => rec.BuildId == model.Id).ToList(); - // if (buildComponents != null && buildComponents.Count > 0) - // { // удалили те в бд, которых нет в модели - // context.BuildComponents.RemoveRange(buildComponents.Where(rec => !model.BuildComponents.ContainsKey(rec.ComponentId))); - // context.SaveChanges(); - // // обновили количество у существующих записей - // foreach (var updateComponent in buildComponents) - // { - // updateComponent.Count = model.BuildComponents[updateComponent.ComponentId].Item2; - // model.BuildComponents.Remove(updateComponent.ComponentId); - // } - // context.SaveChanges(); - // } - // var build = context.Builds.First(x => x.Id == Id); - // //добавляем в бд блюда которые есть в моделе, но ещё нет в бд - // foreach (var dc in model.BuildComponents) - // { - // context.BuildComponents.Add(new BuildComponent - // { - // Build = build, - // Component = context.Components.First(x => x.Id == dc.Key), - // Count = dc.Value.Item2 - // }); - // context.SaveChanges(); - // } - // _buildComponents = null; - //} + public void UpdateComponents(HardwareShopDatabase context, BuildBindingModel model) + { + var buildComponents = context.BuildsComponents.Where(rec => rec.BuildID == model.Id).ToList(); + if (buildComponents != null && buildComponents.Count > 0) + { // удалили те в бд, которых нет в модели + context.BuildsComponents.RemoveRange(buildComponents.Where(rec => !model.BuildComponents.ContainsKey(rec.ComponentId))); + context.SaveChanges(); + // обновили количество у существующих записей + foreach (var updateComponent in buildComponents) + { + updateComponent.Count = model.BuildComponents[updateComponent.ComponentId].Item2; + model.BuildComponents.Remove(updateComponent.ComponentId); + } + context.SaveChanges(); + } + var build = context.Builds.First(x => x.Id == Id); + //добавляем в бд блюда которые есть в моделе, но ещё нет в бд + foreach (var dc in model.BuildComponents) + { + context.BuildsComponents.Add(new BuildComponent + { + Build = build, + Component = context.Components.First(x => x.Id == dc.Key), + Count = dc.Value.Item2 + }); + context.SaveChanges(); + } + _buildComponents = null; + } } } diff --git a/HardwareShop/HardwareShopDatabaseImplement/Models/Component.cs b/HardwareShop/HardwareShopDatabaseImplement/Models/Component.cs index 1b9f655..c62f457 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Models/Component.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Models/Component.cs @@ -10,5 +10,7 @@ namespace HardwareShopDatabaseImplement.Models public class Component : IComponentModel { public int Id { get; set; } + + public virtual User User { get; set; } } } diff --git a/HardwareShop/HardwareShopDatabaseImplement/Models/Good.cs b/HardwareShop/HardwareShopDatabaseImplement/Models/Good.cs index 07a8b3c..4de3950 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Models/Good.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Models/Good.cs @@ -11,5 +11,7 @@ namespace HardwareShopDatabaseImplement.Models public class Good : IGoodModel { public int Id { get; set; } + + public virtual User User { get; set; } } } diff --git a/HardwareShop/HardwareShopDatabaseImplement/Models/Order.cs b/HardwareShop/HardwareShopDatabaseImplement/Models/Order.cs index 48e242a..1ee8524 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Models/Order.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Models/Order.cs @@ -7,5 +7,7 @@ namespace HardwareShopDatabaseImplement.Models public class Order : IOrderModel { public int Id { get; set; } + + public virtual User User { get; set; } } }