diff --git a/ConfectioneryDatabaseImplement/ShopStorage.cs b/ConfectioneryDatabaseImplement/ShopStorage.cs index d541ceb..133c0e4 100644 --- a/ConfectioneryDatabaseImplement/ShopStorage.cs +++ b/ConfectioneryDatabaseImplement/ShopStorage.cs @@ -107,34 +107,37 @@ namespace ConfectioneryDatabaseImplement public bool HasNeedPastries(IPastryModel pastry, int needCount) { - using var context = new ConfectioneryDatabase(); - var resultCount = context.Shops - .Select(shop => shop.Pastries - .FirstOrDefault(x => x.Key == pastry.Id).Value.Item2) - .Sum(); - return resultCount >= needCount; + throw new NotImplementedException(); } public bool SellPastries(IPastryModel pastry, int needCount) { - if (!HasNeedPastries(pastry, needCount)) - { - return false; - } using var context = new ConfectioneryDatabase(); - foreach (var shop in context.Shops.Where(shop => shop.Pastries.ContainsKey(pastry.Id))) + using var transaction = context.Database.BeginTransaction(); + foreach (var sp in context.ShopPastries.Where(x => x.PastryId == pastry.Id)) { - var tuple = shop.Pastries[pastry.Id]; - var diff = Math.Min(tuple.Item2, needCount); - shop.Pastries[pastry.Id] = (tuple.Item1, tuple.Item2 - diff); - - needCount -= diff; - if (needCount <= 0) + var res = Math.Min(needCount, sp.Count); + sp.Count -= res; + needCount -= res; + if (sp.Count == 0) // Изделия больше нет в магазине, значит удаляем его { - return true; + context.ShopPastries.Remove(sp); + } + if (needCount == 0) // Нельзя коммитить изменения в цикле, что использует контекст, поэтому выходим + { + break; } } - return true; + if (needCount == 0) + { + context.SaveChanges(); + transaction.Commit(); + } + else + { + transaction.Rollback(); + } + return needCount == 0; } } }