From 57c68d01a884b98304fcd2fb153a3eb400a3f9ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=91=D0=B0=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D1=81=D0=BA=D0=B0=D1=8F?= Date: Sun, 21 Apr 2024 17:49:53 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B2=20=D0=BE=D0=B1=D1=89=D0=B5=D0=BC,=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=D0=B0=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=20=D0=9C=D0=B0=D0=B3=D0=B0=D0=B7=D0=B8=D0=BD?= =?UTF-8?q?=20=D0=B8=20=D0=9C=D0=B0=D0=B3=D0=B0=D0=B7=D0=B8=D0=BD=D0=A1?= =?UTF-8?q?=D1=83=D1=88=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=B1=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implements/ShopStorage.cs | 13 ++ SushiBarDatabaseImplement/Models/Shop.cs | 112 ++++++++++++++++++ SushiBarDatabaseImplement/Models/ShopSushi.cs | 27 +++++ SushiBarDatabaseImplement/Models/Sushi.cs | 4 + SushiBarDatabaseImplement/SushiBarDatabase.cs | 2 + 5 files changed, 158 insertions(+) create mode 100644 SushiBarDatabaseImplement/Implements/ShopStorage.cs create mode 100644 SushiBarDatabaseImplement/Models/Shop.cs create mode 100644 SushiBarDatabaseImplement/Models/ShopSushi.cs diff --git a/SushiBarDatabaseImplement/Implements/ShopStorage.cs b/SushiBarDatabaseImplement/Implements/ShopStorage.cs new file mode 100644 index 0000000..5cf8c33 --- /dev/null +++ b/SushiBarDatabaseImplement/Implements/ShopStorage.cs @@ -0,0 +1,13 @@ +using SushiBarContracts.StoragesContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SushiBarDatabaseImplement.Implements +{ + public class ShopStorage : IShopStorage + { + } +} diff --git a/SushiBarDatabaseImplement/Models/Shop.cs b/SushiBarDatabaseImplement/Models/Shop.cs new file mode 100644 index 0000000..5a515a9 --- /dev/null +++ b/SushiBarDatabaseImplement/Models/Shop.cs @@ -0,0 +1,112 @@ +using SushiBarContracts.BindingModel; +using SushiBarContracts.ViewModels; +using SushiBarDataModels; +using SushiBarDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace SushiBarDatabaseImplement.Models +{ + public class Shop : IShopModel + { + public int Id { get; private set; } + + [Required] + public string ShopName { get; private set; } + + [Required] + public string Address { get; private set; } + + [Required] + public DateTime DateOpening { get; private set; } + + [Required] + public int MaxCountSushis { get; private set; } + + [ForeignKey("ShopId")] + public List Sushis { get; private set; } = new(); + + private Dictionary? _shopSushis = null; + + [NotMapped] + public Dictionary ShopSushis + { + get + { + if (_shopSushis == null) + { + _shopSushis = Sushis.ToDictionary(recPC => recPC.SushiId, recPC => (recPC.Sushi as ISushiModel, recPC.Count)); + } + return _shopSushis; + } + } + + public static Shop Create(SushiBarDatabase context, ShopBindingModel model) + { + return new Shop() + { + Id = model.Id, + ShopName = model.ShopName, + Address = model.Address, + MaxCountSushis = model.MaxCountSushis, + Sushis = model.ShopSushis.Select(x => new ShopSushi + { + Sushi = context.Sushis.First(y => y.Id == x.Key), Count = x.Value.Item2 + }).ToList() + }; + } + public void Update(ShopBindingModel model) + { + ShopName = model.ShopName; + Address = model.Address; + DateOpening = model.DateOpening; + MaxCountSushis = model.MaxCountSushis; + } + public ShopViewModel GetViewModel => new() + { + Id = Id, + ShopName = ShopName, + Address = Address, + DateOpening = DateOpening, + MaxCountSushis = MaxCountSushis, + ShopSushis = ShopSushis + }; + public void UpdateComponents(SushiBarDatabase context, ShopBindingModel model) + { + var ShopSushis = context.ShopSushis.Where(rec => rec.ShopId == model.Id).ToList(); + if (ShopSushis != null && ShopSushis.Count > 0) + { + // удалили те, которых нет в модели + context.ShopSushis.RemoveRange(ShopSushis.Where(rec => !model.ShopSushis.ContainsKey(rec.SushiId))); + context.SaveChanges(); + ShopSushis = context.ShopSushis.Where(rec => rec.ShopId == model.Id).ToList(); + // обновили количество у существующих записей + foreach (var updateSushi in ShopSushis) + { + updateSushi.Count = model.ShopSushis[updateSushi.SushiId].Item2; + model.ShopSushis.Remove(updateSushi.SushiId); + } + context.SaveChanges(); + } + var shop = context.Shops.First(x => x.Id == Id); + foreach (var elem in model.ShopSushis) + { + context.ShopSushis.Add(new ShopSushi + { + Shop = shop, + Sushi = context.Sushis.First(x => x.Id == elem.Key), + Count = elem.Value.Item2 + }); + context.SaveChanges(); + } + _shopSushis = null; + } + } +} \ No newline at end of file diff --git a/SushiBarDatabaseImplement/Models/ShopSushi.cs b/SushiBarDatabaseImplement/Models/ShopSushi.cs new file mode 100644 index 0000000..5317784 --- /dev/null +++ b/SushiBarDatabaseImplement/Models/ShopSushi.cs @@ -0,0 +1,27 @@ +using SushiBarListImplements.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Runtime.ConstrainedExecution; +using System.Text; +using System.Threading.Tasks; + +namespace SushiBarDatabaseImplement.Models +{ + public class ShopSushi + { + public int Id { get; set; } + + [Required] + public int SushiId { get; set; } + + [Required] + public int ShopId { get; set; } + + [Required] + public int Count { get; set; } + public virtual Shop Shop { get; set; } = new(); + public virtual Sushi Sushi { get; set; } = new(); + } +} diff --git a/SushiBarDatabaseImplement/Models/Sushi.cs b/SushiBarDatabaseImplement/Models/Sushi.cs index 9e3a64e..25de728 100644 --- a/SushiBarDatabaseImplement/Models/Sushi.cs +++ b/SushiBarDatabaseImplement/Models/Sushi.cs @@ -10,11 +10,15 @@ namespace SushiBarDatabaseImplement.Models public class Sushi : ISushiModel { public int Id { get; set; } + [Required] public string SushiName { get; set; } = string.Empty; + [Required] public double Price { get; set; } + private Dictionary? _sushiComponents = null; + [NotMapped] public Dictionary SushiComponents { diff --git a/SushiBarDatabaseImplement/SushiBarDatabase.cs b/SushiBarDatabaseImplement/SushiBarDatabase.cs index 7c0c158..024eac5 100644 --- a/SushiBarDatabaseImplement/SushiBarDatabase.cs +++ b/SushiBarDatabaseImplement/SushiBarDatabase.cs @@ -24,5 +24,7 @@ namespace SushiBarDatabaseImplement public virtual DbSet Sushis { set; get; } public virtual DbSet SushiComponents { set; get; } public virtual DbSet Orders { set; get; } + public virtual DbSet Shops { set; get; } + public virtual DbSet ShopSushis { set; get; } } }