From 48027c484dc13345e5ac2b061aa4d02708384344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D0=B5=D0=BC=20=D0=A5=D0=B0=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BC=D0=BE=D0=B2?= Date: Mon, 6 Feb 2023 11:11:35 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=D0=BE=D0=B2=20=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20+=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractFoodOrdersListImplement.csproj | 14 ++ .../DataListSingleton.cs | 31 +++++ .../Implements/ComponentStorage.cs | 12 ++ .../Implements/DishStorage.cs | 106 +++++++++++++++ .../Implements/OrderStorage.cs | 123 ++++++++++++++++++ .../Models/Component.cs | 47 +++++++ .../Models/Dish.cs | 49 +++++++ .../Models/Order.cs | 63 +++++++++ 8 files changed, 445 insertions(+) create mode 100644 FoodOrders/AbstractFoodOrdersListImplement/AbstractFoodOrdersListImplement.csproj create mode 100644 FoodOrders/AbstractFoodOrdersListImplement/DataListSingleton.cs create mode 100644 FoodOrders/AbstractFoodOrdersListImplement/Implements/ComponentStorage.cs create mode 100644 FoodOrders/AbstractFoodOrdersListImplement/Implements/DishStorage.cs create mode 100644 FoodOrders/AbstractFoodOrdersListImplement/Implements/OrderStorage.cs create mode 100644 FoodOrders/AbstractFoodOrdersListImplement/Models/Component.cs create mode 100644 FoodOrders/AbstractFoodOrdersListImplement/Models/Dish.cs create mode 100644 FoodOrders/AbstractFoodOrdersListImplement/Models/Order.cs diff --git a/FoodOrders/AbstractFoodOrdersListImplement/AbstractFoodOrdersListImplement.csproj b/FoodOrders/AbstractFoodOrdersListImplement/AbstractFoodOrdersListImplement.csproj new file mode 100644 index 0000000..9d405d7 --- /dev/null +++ b/FoodOrders/AbstractFoodOrdersListImplement/AbstractFoodOrdersListImplement.csproj @@ -0,0 +1,14 @@ + + + + net6.0 + enable + enable + + + + + + + + diff --git a/FoodOrders/AbstractFoodOrdersListImplement/DataListSingleton.cs b/FoodOrders/AbstractFoodOrdersListImplement/DataListSingleton.cs new file mode 100644 index 0000000..48da865 --- /dev/null +++ b/FoodOrders/AbstractFoodOrdersListImplement/DataListSingleton.cs @@ -0,0 +1,31 @@ +using AbstractFoodOrdersListImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFoodOrdersListImplement +{ + public class DataListSingleton + { + private static DataListSingleton? _instance; + public List Components { get; set; } + public List Orders { get; set; } + public List Products { get; set; } + private DataListSingleton() + { + Components = new List(); + Orders = new List(); + Products = new List(); + } + public static DataListSingleton GetInstance() + { + if (_instance == null) + { + _instance = new DataListSingleton(); + } + return _instance; + } + } +} diff --git a/FoodOrders/AbstractFoodOrdersListImplement/Implements/ComponentStorage.cs b/FoodOrders/AbstractFoodOrdersListImplement/Implements/ComponentStorage.cs new file mode 100644 index 0000000..59235d1 --- /dev/null +++ b/FoodOrders/AbstractFoodOrdersListImplement/Implements/ComponentStorage.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFoodOrdersListImplement.Implements +{ + internal class ComponentStorage + { + } +} diff --git a/FoodOrders/AbstractFoodOrdersListImplement/Implements/DishStorage.cs b/FoodOrders/AbstractFoodOrdersListImplement/Implements/DishStorage.cs new file mode 100644 index 0000000..022643b --- /dev/null +++ b/FoodOrders/AbstractFoodOrdersListImplement/Implements/DishStorage.cs @@ -0,0 +1,106 @@ +using AbstractFoodOrdersContracts.BindingModels; +using AbstractFoodOrdersContracts.SearchModels; +using AbstractFoodOrdersContracts.StoragesContracts; +using AbstractFoodOrdersContracts.ViewModels; +using AbstractFoodOrdersListImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFoodOrdersListImplement.Implements +{ + public class DishStorage : IDishStorage + { + private readonly DataListSingleton _source; + public DishStorage() + { + _source = DataListSingleton.GetInstance(); + } + public List GetFullList() + { + var result = new List(); + foreach (var dish in _source.Dishes) + { + result.Add(dish.GetViewModel); + } + return result; + } + public List GetFilteredList(DishSearchModel model) + { + var result = new List(); + if (string.IsNullOrEmpty(model.DishName)) + { + return result; + } + foreach (var dish in _source.Dishes) + { + if (dish.DishName.Contains(model.DishName)) + { + result.Add(dish.GetViewModel); + } + } + return result; + } + public DishViewModel? GetElement(DishSearchModel model) + { + if (string.IsNullOrEmpty(model.DishName) && !model.Id.HasValue) + { + return null; + } + foreach (var dish in _source.Dishes) + { + if ((!string.IsNullOrEmpty(model.DishName) && dish.DishName == model.DishName) || + (model.Id.HasValue && dish.Id == model.Id)) + { + return dish.GetViewModel; + } + } + return null; + } + public DishViewModel? Insert(DishBindingModel model) + { + model.Id = 1; + foreach (var dish in _source.Dishes) + { + if (model.Id <= dish.Id) + { + model.Id = dish.Id + 1; + } + } + var newDish = Dish.Create(model); + if (newDish == null) + { + return null; + } + _source.Dishes.Add(newDish); + return newDish.GetViewModel; + } + public DishViewModel? Update(DishBindingModel model) + { + foreach (var dish in _source.Dishes) + { + if (dish.Id == model.Id) + { + dish.Update(model); + return dish.GetViewModel; + } + } + return null; + } + public DishViewModel? Delete(DishBindingModel model) + { + for (int i = 0; i < _source.Dishes.Count; ++i) + { + if (_source.Dishes[i].Id == model.Id) + { + var element = _source.Dishes[i]; + _source.Dishes.RemoveAt(i); + return element.GetViewModel; + } + } + return null; + } + } +} diff --git a/FoodOrders/AbstractFoodOrdersListImplement/Implements/OrderStorage.cs b/FoodOrders/AbstractFoodOrdersListImplement/Implements/OrderStorage.cs new file mode 100644 index 0000000..db015b8 --- /dev/null +++ b/FoodOrders/AbstractFoodOrdersListImplement/Implements/OrderStorage.cs @@ -0,0 +1,123 @@ +using AbstractFoodOrdersContracts.BindingModels; +using AbstractFoodOrdersContracts.SearchModels; +using AbstractFoodOrdersContracts.StoragesContracts; +using AbstractFoodOrdersContracts.ViewModels; +using AbstractFoodOrdersListImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFoodOrdersListImplement.Implements +{ + public class OrderStorage : IOrderStorage + { + private readonly DataListSingleton _source; + public OrderStorage() + { + _source = DataListSingleton.GetInstance(); + } + public List GetFullList() + { + var result = new List(); + foreach (var order in _source.Orders) + { + result.Add(AttachReinforcedName(order.GetViewModel)); + } + return result; + } + public List GetFilteredList(OrderSearchModel model) + { + //А, собственно, этт метод не имеет ценности, так как повторяет функционал следующего + var result = new List(); + if (model == null || !model.Id.HasValue) + { + return result; + } + foreach (var order in _source.Orders) + { + if (order.Id == model.Id) + { + result.Add(AttachReinforcedName(order.GetViewModel)); + } + } + return result; + + } + public OrderViewModel? GetElement(OrderSearchModel model) + { + if (!model.Id.HasValue) + { + return null; + } + foreach (var order in _source.Orders) + { + if (model.Id.HasValue && order.Id == model.Id) + { + return AttachReinforcedName(order.GetViewModel); + } + } + return null; + + } + public OrderViewModel? Insert(OrderBindingModel model) + { + model.Id = 1; + foreach (var order in _source.Orders) + { + if (model.Id <= order.Id) + { + model.Id = order.Id + 1; + } + } + var newOrder = Order.Create(model); + if (newOrder == null) + { + return null; + } + _source.Orders.Add(newOrder); + return AttachReinforcedName(newOrder.GetViewModel); + } + public OrderViewModel? Update(OrderBindingModel model) + { + foreach (var order in _source.Orders) + { + if (order.Id == model.Id) + { + order.Update(model); + return AttachReinforcedName(order.GetViewModel); + } + } + return null; + } + public OrderViewModel? Delete(OrderBindingModel model) + { + for (int i = 0; i < _source.Orders.Count; ++i) + { + if (_source.Orders[i].Id == model.Id) + { + var element = _source.Orders[i]; + _source.Orders.RemoveAt(i); + return AttachReinforcedName(element.GetViewModel); + } + } + return null; + } + private OrderViewModel AttachReinforcedName(OrderViewModel model) + { + //Из всех мест, это выглядит наиболее подходящим, для данной манипуляции. + //При расположении ниже нарушится целостность данных + //При расположении выше будет нарушен принцип разделения уровней + foreach (var reinforced in _source.Dishes) + { + if (reinforced.Id == model.DishId) + { + model.DishName = reinforced.DishName; + return model; + } + } + return model; + } + } +} diff --git a/FoodOrders/AbstractFoodOrdersListImplement/Models/Component.cs b/FoodOrders/AbstractFoodOrdersListImplement/Models/Component.cs new file mode 100644 index 0000000..406ac57 --- /dev/null +++ b/FoodOrders/AbstractFoodOrdersListImplement/Models/Component.cs @@ -0,0 +1,47 @@ +using AbstractFoodOrdersContracts.BindingModels; +using AbstractFoodOrdersContracts.ViewModels; +using AbstractFoodOrdersDataModels.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFoodOrdersListImplement.Models +{ + public class Component : IComponentModel + { + public int Id { get; private set; } + public string ComponentName { get; private set; } = string.Empty; + public double Cost { get; set; } + public static Component? Create(ComponentBindingModel? model) + { + if (model == null) + { + return null; + } + return new Component() + { + Id = model.Id, + ComponentName = model.ComponentName, + Cost = model.Cost + }; + } + public void Update(ComponentBindingModel? model) + { + if (model == null) + { + return; + } + ComponentName = model.ComponentName; + Cost = model.Cost; + } + public ComponentViewModel GetViewModel => new() + { + Id = Id, + ComponentName = ComponentName, + Cost = Cost + }; + } + +} diff --git a/FoodOrders/AbstractFoodOrdersListImplement/Models/Dish.cs b/FoodOrders/AbstractFoodOrdersListImplement/Models/Dish.cs new file mode 100644 index 0000000..4759747 --- /dev/null +++ b/FoodOrders/AbstractFoodOrdersListImplement/Models/Dish.cs @@ -0,0 +1,49 @@ +using AbstractFoodOrdersContracts.BindingModels; +using AbstractFoodOrdersContracts.ViewModels; +using AbstractFoodOrdersDataModels.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFoodOrdersListImplement.Models +{ + public class Dish : IDishModel + { + public int Id { get; private set; } + public string DishName { get; private set; } = string.Empty; + public double Price { get; private set; } + public Dictionary DishComponents + { + get; + private set; + } = new Dictionary(); + public static Dish? Create(ProductBindingModel? model) + { + if (model == null) + { + return null; + } + return new Dish(){ Id = model.Id, DishName = model.DishName, Price = model.Price, DishComponents = model.DishComponents }; + } + public void Update(ProductBindingModel? model) + { + if (model == null) + { + return; + } + DishName = model.DishName; + Price = model.Price; + DishComponents = model.DishComponents; + } + public DishViewModel GetViewModel => new() + { + Id = Id, + DishName = DishName, + Price = Price, + DishComponents = DishComponents + }; + } + +} diff --git a/FoodOrders/AbstractFoodOrdersListImplement/Models/Order.cs b/FoodOrders/AbstractFoodOrdersListImplement/Models/Order.cs new file mode 100644 index 0000000..293b645 --- /dev/null +++ b/FoodOrders/AbstractFoodOrdersListImplement/Models/Order.cs @@ -0,0 +1,63 @@ +using AbstractFoodOrdersContracts.BindingModels; +using AbstractFoodOrdersContracts.ViewModels; +using AbstractFoodOrdersDataModels.Enums; +using AbstractFoodOrdersDataModels.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AbstractFoodOrdersListImplement.Models +{ + public class Order : IOrderModel + { + public int Id { get; private set; } + public int DishId { get; private set; } + public int Count { get; private set; } + public double Sum { get; private set; } + public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; + public DateTime DateCreate { get; private set; } = DateTime.Now; + public DateTime? DateImplement { get; private set; } + public static Order? Create(OrderBindingModel? model) + { + if (model == null) + { + return null; + } + return new Order() + { + Id = model.Id, + DishId = model.DishId, + Count = model.Count, + Sum = model.Sum, + Status = model.Status, + DateCreate = model.DateCreate, + DateImplement = model.DateImplement, + }; + } + public void Update(OrderBindingModel? model) + { + if (model == null) + { + return; + } + DishId = model.DishId; + Count = model.Count; + Sum = model.Sum; + Status = model.Status; + DateCreate = model.DateCreate; + DateImplement = model.DateImplement; + } + public OrderViewModel GetViewModel => new() + { + Id = Id, + DishId = DishId, + Count = Count, + Sum = Sum, + Status = Status, + DateCreate = DateCreate, + DateImplement = DateImplement, + }; + } +}