diff --git a/Pizzeria/Pizzeria.sln b/Pizzeria/Pizzeria.sln index c868b9f..1c18c22 100644 --- a/Pizzeria/Pizzeria.sln +++ b/Pizzeria/Pizzeria.sln @@ -5,14 +5,16 @@ VisualStudioVersion = 17.7.34024.191 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PizzeriaView", "PizzeriaView\PizzeriaView.csproj", "{C3B647C4-306F-43B5-BDF2-FF5F3A34364F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PizzeriaBusinessLogic", "PizzeriaBusinessLogic\PizzeriaBusinessLogic.csproj", "{906C7D67-BBCC-48D7-BB34-62A9A35779A8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PizzeriaBusinessLogic", "PizzeriaBusinessLogic\PizzeriaBusinessLogic.csproj", "{906C7D67-BBCC-48D7-BB34-62A9A35779A8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PizzeriaContracts", "PizzeriaContracts\PizzeriaContracts.csproj", "{A625183B-6EEA-4995-B06D-E10835CEFE9C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PizzeriaContracts", "PizzeriaContracts\PizzeriaContracts.csproj", "{A625183B-6EEA-4995-B06D-E10835CEFE9C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PizzeriaDataModels", "PizzeriaDataModels\PizzeriaDataModels.csproj", "{D0318436-6887-4AD1-92B2-19A7F37240DC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PizzeriaDataModels", "PizzeriaDataModels\PizzeriaDataModels.csproj", "{D0318436-6887-4AD1-92B2-19A7F37240DC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PizzeriaListImplement", "PizzeriaListImplement\PizzeriaListImplement.csproj", "{190E2EDD-BFA6-4213-9F8A-1B1D4FBBB8E4}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PizzeriaFileImplement", "PizzeriaFileImplement\PizzeriaFileImplement.csproj", "{678CE6E1-EEBF-4D54-AFCA-B1DEAF300C88}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/Pizzeria/PizzeriaFileImplement/DataFileSingleton.cs b/Pizzeria/PizzeriaFileImplement/DataFileSingleton.cs deleted file mode 100644 index 91526a5..0000000 --- a/Pizzeria/PizzeriaFileImplement/DataFileSingleton.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using PizzeriaFileImplement.Models; -using System.Xml.Linq; - -namespace PizzeriaFileImplement -{ - public class DataFileSingleton - { - private static DataFileSingleton? instance; - private readonly string ComponentFileName = "Component.xml"; - private readonly string OrderFileName = "Order.xml"; - private readonly string PizzaFileName = "Pizza.xml"; - public List Components { get; private set; } - public List Orders { get; private set; } - public List Pizzas { get; private set; } - - public static DataFileSingleton GetInstance() - { - if (instance == null) - { - instance = new DataFileSingleton(); - } - return instance; - } - - public void SaveComponents() => SaveData(Components, ComponentFileName, "Components", x => x.GetXElement); - public void SavePizzas() => SaveData(Pizzas, PizzaFileName, "Pizzas", x => x.GetXElement); - public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement); - - private DataFileSingleton() - { - Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; - Pizzas = LoadData(PizzaFileName, "Pizza", x => Pizza.Create(x)!)!; - Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; - } - - private static List? LoadData(string filename, string xmlNodeName, Func selectFunction) - { - if (File.Exists(filename)) - { - return XDocument.Load(filename)?.Root?.Elements(xmlNodeName)?.Select(selectFunction)?.ToList(); - } - return new List(); - } - - private static void SaveData(List data, string filename, string xmlNodeName, Func selectFunction) - { - if (data != null) - { - new XDocument(new XElement(xmlNodeName, data.Select(selectFunction).ToArray())).Save(filename); - } - } - } -} diff --git a/Pizzeria/PizzeriaFileImplement/Implements/ComponentStorage.cs b/Pizzeria/PizzeriaFileImplement/Implements/ComponentStorage.cs deleted file mode 100644 index 06b8716..0000000 --- a/Pizzeria/PizzeriaFileImplement/Implements/ComponentStorage.cs +++ /dev/null @@ -1,86 +0,0 @@ -using PizzeriaContracts.BindingModels; -using PizzeriaContracts.SearchModels; -using PizzeriaContracts.StoragesContracts; -using PizzeriaContracts.ViewModels; -using PizzeriaFileImplement.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace PizzeriaFileImplement.Implements -{ - public class ComponentStorage : IComponentStorage - { - private readonly DataFileSingleton source; - - public ComponentStorage() - { - source = DataFileSingleton.GetInstance(); - } - - public List GetFullList() - { - return source.Components.Select(x => x.GetViewModel).ToList(); - } - - public List GetFilteredList(ComponentSearchModel model) - { - if (string.IsNullOrEmpty(model.ComponentName)) - { - return new(); - } - return source.Components.Where(x => x.ComponentName.Contains(model.ComponentName)).Select(x => x.GetViewModel).ToList(); - } - - public ComponentViewModel? GetElement(ComponentSearchModel model) - { - if (string.IsNullOrEmpty(model.ComponentName) && !model.Id.HasValue) - { - return null; - } - return source.Components.FirstOrDefault(x => - (!string.IsNullOrEmpty(model.ComponentName) && x.ComponentName == model.ComponentName) || - (model.Id.HasValue && x.Id == model.Id)) - ?.GetViewModel; - } - - public ComponentViewModel? Insert(ComponentBindingModel model) - { - model.Id = source.Components.Count > 0 ? source.Components.Max(x => x.Id) + 1 : 1; - var newComponent = Component.Create(model); - if (newComponent == null) - { - return null; - } - source.Components.Add(newComponent); - source.SaveComponents(); - return newComponent.GetViewModel; - } - - public ComponentViewModel? Update(ComponentBindingModel model) - { - var component = source.Components.FirstOrDefault(x => x.Id == model.Id); - if (component == null) - { - return null; - } - component.Update(model); - source.SaveComponents(); - return component.GetViewModel; - } - - public ComponentViewModel? Delete(ComponentBindingModel model) - { - var element = source.Components.FirstOrDefault(x => x.Id == model.Id); - if (element != null) - { - source.Components.Remove(element); - source.SaveComponents(); - return element.GetViewModel; - } - return null; - } - } -} diff --git a/Pizzeria/PizzeriaFileImplement/Implements/OrderStorage.cs b/Pizzeria/PizzeriaFileImplement/Implements/OrderStorage.cs deleted file mode 100644 index 4fecc2f..0000000 --- a/Pizzeria/PizzeriaFileImplement/Implements/OrderStorage.cs +++ /dev/null @@ -1,94 +0,0 @@ -using PizzeriaContracts.BindingModels; -using PizzeriaContracts.SearchModels; -using PizzeriaContracts.StoragesContracts; -using PizzeriaContracts.ViewModels; -using PizzeriaFileImplement.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace PizzeriaFileImplement.Implements -{ - public class OrderStorage : IOrderStorage - { - private readonly DataFileSingleton source; - - public OrderStorage() - { - source = DataFileSingleton.GetInstance(); - } - - public List GetFullList() => source.Orders.Select(x => AttachPizzaName(x.GetViewModel)).ToList(); - - public List GetFilteredList(OrderSearchModel model) - { - if (!model.Id.HasValue) - { - return new(); - } - return source.Orders.Where(x => x.Id == model.Id).Select(x => AttachPizzaName(x.GetViewModel)).ToList(); - } - - public OrderViewModel? GetElement(OrderSearchModel model) - { - if (!model.Id.HasValue) - { - return new(); - } - return AttachPizzaName(source.Orders.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel); - } - - public OrderViewModel? Insert(OrderBindingModel model) - { - model.Id = source.Orders.Count > 0 ? source.Orders.Max(x => x.Id) + 1 : 1; - var newOrder = Order.Create(model); - if (newOrder == null) - { - return null; - } - source.Orders.Add(newOrder); - source.SaveOrders(); - return AttachPizzaName(newOrder.GetViewModel); - } - - public OrderViewModel? Update(OrderBindingModel model) - { - var order = source.Orders.FirstOrDefault(x => x.Id == model.Id); - if (order == null) - { - return null; - } - order.Update(model); - source.SaveOrders(); - return AttachPizzaName(order.GetViewModel); - } - - public OrderViewModel? Delete(OrderBindingModel model) - { - var order = source.Orders.FirstOrDefault(x => x.Id == model.Id); - if (order != null) - { - source.Orders.Remove(order); - source.SaveOrders(); - return AttachPizzaName(order.GetViewModel); - } - return null; - } - - private OrderViewModel? AttachPizzaName(OrderViewModel? model) - { - if (model == null) - { - return null; - } - var pizza = source.Pizzas.FirstOrDefault(x => x.Id == model.PizzaId); - if (pizza != null) - { - model.PizzaName = pizza.PizzaName; - } - return model; - } - } -} diff --git a/Pizzeria/PizzeriaFileImplement/Implements/PizzaStorage.cs b/Pizzeria/PizzeriaFileImplement/Implements/PizzaStorage.cs deleted file mode 100644 index 3c17ade..0000000 --- a/Pizzeria/PizzeriaFileImplement/Implements/PizzaStorage.cs +++ /dev/null @@ -1,86 +0,0 @@ -using PizzeriaContracts.BindingModels; -using PizzeriaContracts.SearchModels; -using PizzeriaContracts.StoragesContracts; -using PizzeriaContracts.ViewModels; -using PizzeriaFileImplement.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace PizzeriaFileImplement.Implements -{ - public class PizzaStorage : IPizzaStorage - { - private readonly DataFileSingleton source; - - public PizzaStorage() - { - source = DataFileSingleton.GetInstance(); - } - - public List GetFullList() - { - return source.Pizzas.Select(x => x.GetViewModel).ToList(); - } - - public List GetFilteredList(PizzaSearchModel model) - { - if (string.IsNullOrEmpty(model.PizzaName)) - { - return new(); - } - return source.Pizzas.Where(x => x.PizzaName.Contains(model.PizzaName)).Select(x => x.GetViewModel).ToList(); - } - - public PizzaViewModel? GetElement(PizzaSearchModel model) - { - if (string.IsNullOrEmpty(model.PizzaName) && !model.Id.HasValue) - { - return null; - } - return source.Pizzas.FirstOrDefault(x => - (!string.IsNullOrEmpty(model.PizzaName) && x.PizzaName == model.PizzaName) || - (model.Id.HasValue && x.Id == model.Id)) - ?.GetViewModel; - } - - public PizzaViewModel? Insert(PizzaBindingModel model) - { - model.Id = source.Pizzas.Count > 0 ? source.Pizzas.Max(x => x.Id) + 1 : 1; - var newPizza = Pizza.Create(model); - if (newPizza == null) - { - return null; - } - source.Pizzas.Add(newPizza); - source.SavePizzas(); - return newPizza.GetViewModel; - } - - public PizzaViewModel? Update(PizzaBindingModel model) - { - var Pizza = source.Pizzas.FirstOrDefault(x => x.Id == model.Id); - if (Pizza == null) - { - return null; - } - Pizza.Update(model); - source.SavePizzas(); - return Pizza.GetViewModel; - } - - public PizzaViewModel? Delete(PizzaBindingModel model) - { - var Pizza = source.Pizzas.FirstOrDefault(x => x.Id == model.Id); - if (Pizza != null) - { - source.Pizzas.Remove(Pizza); - source.SavePizzas(); - return Pizza.GetViewModel; - } - return null; - } - } -} diff --git a/Pizzeria/PizzeriaFileImplement/Models/Component.cs b/Pizzeria/PizzeriaFileImplement/Models/Component.cs deleted file mode 100644 index 1efe080..0000000 --- a/Pizzeria/PizzeriaFileImplement/Models/Component.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using PizzeriaContracts.BindingModels; -using PizzeriaContracts.ViewModels; -using PizzeriaDataModels.Models; -using System.Xml.Linq; - -namespace PizzeriaFileImplement.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 static Component? Create(XElement element) - { - if (element == null) - { - return null; - } - return new Component() - { - Id = Convert.ToInt32(element.Attribute("Id")!.Value), - ComponentName = element.Element("ComponentName")!.Value, - Cost = Convert.ToDouble(element.Element("Cost")!.Value) - }; - } - - 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 - }; - - public XElement GetXElement => new("Component", - new XAttribute("Id", Id), - new XElement("ComponentName", ComponentName), - new XElement("Cost", Cost.ToString())); - } -} diff --git a/Pizzeria/PizzeriaFileImplement/Models/Order.cs b/Pizzeria/PizzeriaFileImplement/Models/Order.cs deleted file mode 100644 index af29cef..0000000 --- a/Pizzeria/PizzeriaFileImplement/Models/Order.cs +++ /dev/null @@ -1,92 +0,0 @@ -using PizzeriaContracts.BindingModels; -using PizzeriaContracts.ViewModels; -using PizzeriaDataModels.Enums; -using PizzeriaDataModels.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; - -namespace PizzeriaFileImplement.Models -{ - public class Order : IOrderModel - { - public int Id { get; private set; } - public int PizzaId { 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, - PizzaId = model.PizzaId, - Count = model.Count, - Sum = model.Sum, - Status = model.Status, - DateCreate = model.DateCreate, - DateImplement = model.DateImplement, - }; - } - - public static Order? Create(XElement element) - { - if (element == null) - { - return null; - } - string dateImplement = element.Element("DateImplement")!.Value; - return new Order() - { - Id = Convert.ToInt32(element.Attribute("Id")!.Value), - PizzaId = Convert.ToInt32(element.Element("PizzaId")!.Value), - Count = Convert.ToInt32(element.Element("Count")!.Value), - Sum = Convert.ToDouble(element.Element("Sum")!.Value), - Status = (OrderStatus)(Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value)), - DateCreate = Convert.ToDateTime(element.Element("DateCreate")!.Value), - DateImplement = (dateImplement == "" || dateImplement is null) ? Convert.ToDateTime(null) : Convert.ToDateTime(dateImplement) - }; - - } - - public void Update(OrderBindingModel? model) - { - if (model == null) - { - return; - } - Status = model.Status; - if (model.Status == OrderStatus.Выдан) DateImplement = model.DateImplement; - } - - public OrderViewModel GetViewModel => new() - { - Id = Id, - PizzaId = PizzaId, - Count = Count, - Sum = Sum, - Status = Status, - DateCreate = DateCreate, - DateImplement = DateImplement, - }; - - public XElement GetXElement => new("Order", - new XAttribute("Id", Id), - new XElement("PizzaId", PizzaId.ToString()), - new XElement("Count", Count.ToString()), - new XElement("Sum", Sum.ToString()), - new XElement("Status", Status.ToString()), - new XElement("DateCreate", DateCreate.ToString()), - new XElement("DateImplement", DateImplement.ToString())); - } -} diff --git a/Pizzeria/PizzeriaFileImplement/Models/Pizza.cs b/Pizzeria/PizzeriaFileImplement/Models/Pizza.cs deleted file mode 100644 index 240a5d6..0000000 --- a/Pizzeria/PizzeriaFileImplement/Models/Pizza.cs +++ /dev/null @@ -1,92 +0,0 @@ -using PizzeriaContracts.BindingModels; -using PizzeriaContracts.ViewModels; -using PizzeriaDataModels.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; - -namespace PizzeriaFileImplement.Models -{ - public class Pizza : IPizzaModel - { - public int Id { get; private set; } - public string PizzaName { get; private set; } = string.Empty; - public double Price { get; private set; } - public Dictionary Components { get; private set; } = new(); - private Dictionary? _pizzaComponents = null; - - public Dictionary PizzaComponents - { - get - { - if (_pizzaComponents == null) - { - var source = DataFileSingleton.GetInstance(); - _pizzaComponents = Components.ToDictionary(x => x.Key, y => ((source.Components.FirstOrDefault(z => z.Id == y.Key) as IComponentModel)!, y.Value)); - } - return _pizzaComponents; - } - } - - public static Pizza? Create(PizzaBindingModel model) - { - if (model == null) - { - return null; - } - return new Pizza() - { - Id = model.Id, - PizzaName = model.PizzaName, - Price = model.Price, - Components = model.PizzaComponents.ToDictionary(x => x.Key, x => x.Value.Item2) - }; - } - - public static Pizza? Create(XElement element) - { - if (element == null) - { - return null; - } - return new Pizza() - { - Id = Convert.ToInt32(element.Attribute("Id")!.Value), - PizzaName = element.Element("PizzaName")!.Value, - Price = Convert.ToDouble(element.Element("Price")!.Value), - Components = element.Element("PizzaComponents")!.Elements("PizzaComponent").ToDictionary(x => Convert.ToInt32(x.Element("Key")?.Value), - x => Convert.ToInt32(x.Element("Value")?.Value)) - }; - } - - public void Update(PizzaBindingModel model) - { - if (model == null) - { - return; - } - PizzaName = model.PizzaName; - Price = model.Price; - Components = model.PizzaComponents.ToDictionary(x => x.Key, x => x.Value.Item2); - _pizzaComponents = null; - } - - public PizzaViewModel GetViewModel => new() - { - Id = Id, - PizzaName = PizzaName, - Price = Price, - PizzaComponents = PizzaComponents - }; - - public XElement GetXElement => new("Pizza", - new XAttribute("Id", Id), - new XElement("PizzaName", PizzaName), - new XElement("Price", Price.ToString()), - new XElement("PizzaComponents", Components.Select( - x => new XElement("PizzaComponent", new XElement("Key", x.Key), new XElement("Value", x.Value))).ToArray())); - } -} diff --git a/Pizzeria/PizzeriaFileImplement/PizzeriaFileImplement.csproj b/Pizzeria/PizzeriaFileImplement/PizzeriaFileImplement.csproj deleted file mode 100644 index b612a23..0000000 --- a/Pizzeria/PizzeriaFileImplement/PizzeriaFileImplement.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - net6.0 - enable - enable - - - - - - - -