From 76bc3336038242ebf2309fe89591573889db490a Mon Sep 17 00:00:00 2001 From: DeerElk Date: Sun, 7 Apr 2024 08:38:21 +0400 Subject: [PATCH] lab1 --- .../ConfectioneryFileImplement.csproj | 14 --- .../DataFileSingleton.cs | 57 ----------- .../Implements/ComponentStorage.cs | 83 ---------------- .../Implements/OrderStorage.cs | 99 ------------------- .../Implements/PastryStorage.cs | 83 ---------------- .../Models/Component.cs | 58 ----------- .../Models/Order.cs | 86 ---------------- .../Models/Pastry.cs | 91 ----------------- 8 files changed, 571 deletions(-) delete mode 100644 Confectionery/ConfectioneryFileImplement/ConfectioneryFileImplement.csproj delete mode 100644 Confectionery/ConfectioneryFileImplement/DataFileSingleton.cs delete mode 100644 Confectionery/ConfectioneryFileImplement/Implements/ComponentStorage.cs delete mode 100644 Confectionery/ConfectioneryFileImplement/Implements/OrderStorage.cs delete mode 100644 Confectionery/ConfectioneryFileImplement/Implements/PastryStorage.cs delete mode 100644 Confectionery/ConfectioneryFileImplement/Models/Component.cs delete mode 100644 Confectionery/ConfectioneryFileImplement/Models/Order.cs delete mode 100644 Confectionery/ConfectioneryFileImplement/Models/Pastry.cs diff --git a/Confectionery/ConfectioneryFileImplement/ConfectioneryFileImplement.csproj b/Confectionery/ConfectioneryFileImplement/ConfectioneryFileImplement.csproj deleted file mode 100644 index f0eca47..0000000 --- a/Confectionery/ConfectioneryFileImplement/ConfectioneryFileImplement.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - net8.0 - enable - enable - - - - - - - - diff --git a/Confectionery/ConfectioneryFileImplement/DataFileSingleton.cs b/Confectionery/ConfectioneryFileImplement/DataFileSingleton.cs deleted file mode 100644 index 38b16f6..0000000 --- a/Confectionery/ConfectioneryFileImplement/DataFileSingleton.cs +++ /dev/null @@ -1,57 +0,0 @@ -using ConfectioneryFileImplement.Models; -using System.Xml.Linq; -namespace ConfectioneryFileImplement -{ - internal class DataFileSingleton - { - private static DataFileSingleton? instance; - private readonly string ComponentFileName = "Component.xml"; - private readonly string OrderFileName = "Order.xml"; - private readonly string PastryFileName = "Pastry.xml"; - public List Components { get; private set; } - public List Orders { get; private set; } - public List Pastries { 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 SavePastries() => SaveData(Pastries, PastryFileName, - "Pastries", x => x.GetXElement); - public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", - x => x.GetXElement); - private DataFileSingleton() - { - Components = LoadData(ComponentFileName, "Component", - x => Component.Create(x)!)!; - Pastries = LoadData(PastryFileName, "Pastry", - x => Pastry.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); - } - } - } -} \ No newline at end of file diff --git a/Confectionery/ConfectioneryFileImplement/Implements/ComponentStorage.cs b/Confectionery/ConfectioneryFileImplement/Implements/ComponentStorage.cs deleted file mode 100644 index a0b0639..0000000 --- a/Confectionery/ConfectioneryFileImplement/Implements/ComponentStorage.cs +++ /dev/null @@ -1,83 +0,0 @@ -using ConfectioneryContracts.BindingModels; -using ConfectioneryContracts.SearchModels; -using ConfectioneryContracts.StoragesContracts; -using ConfectioneryContracts.ViewModels; -using ConfectioneryFileImplement.Models; -namespace ConfectioneryFileImplement.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/Confectionery/ConfectioneryFileImplement/Implements/OrderStorage.cs b/Confectionery/ConfectioneryFileImplement/Implements/OrderStorage.cs deleted file mode 100644 index 801bbdd..0000000 --- a/Confectionery/ConfectioneryFileImplement/Implements/OrderStorage.cs +++ /dev/null @@ -1,99 +0,0 @@ -using ConfectioneryContracts.BindingModels; -using ConfectioneryContracts.SearchModels; -using ConfectioneryContracts.StoragesContracts; -using ConfectioneryContracts.ViewModels; -using ConfectioneryFileImplement.Models; - -namespace ConfectioneryFileImplement.Implements -{ - public class OrderStorage : IOrderStorage - { - private readonly DataFileSingleton source; - public OrderStorage() - { - source = DataFileSingleton.GetInstance(); - } - - public List GetFullList() - { - return source.Orders - .Select(x => AccessPastryStorage(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 => AccessPastryStorage(x.GetViewModel)) - .ToList(); - } - - public OrderViewModel? GetElement(OrderSearchModel model) - { - if (!model.Id.HasValue) - { - return null; - } - return AccessPastryStorage(source.Orders.FirstOrDefault( - x => (model.Id.HasValue && 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 AccessPastryStorage(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 AccessPastryStorage(order.GetViewModel); - } - public OrderViewModel? Delete(OrderBindingModel model) - { - var element = source.Orders.FirstOrDefault(x => x.Id == - model.Id); - if (element != null) - { - source.Orders.Remove(element); - source.SaveOrders(); - return AccessPastryStorage(element.GetViewModel); - } - return null; - } - - public OrderViewModel AccessPastryStorage(OrderViewModel model) - { - if (model == null) - return null; - foreach (var Pastry in source.Pastries) - { - if (Pastry.Id == model.PastryId) - { - model.PastryName = Pastry.PastryName; - break; - } - } - return model; - } - } -} \ No newline at end of file diff --git a/Confectionery/ConfectioneryFileImplement/Implements/PastryStorage.cs b/Confectionery/ConfectioneryFileImplement/Implements/PastryStorage.cs deleted file mode 100644 index fff167d..0000000 --- a/Confectionery/ConfectioneryFileImplement/Implements/PastryStorage.cs +++ /dev/null @@ -1,83 +0,0 @@ -using ConfectioneryContracts.BindingModels; -using ConfectioneryContracts.SearchModels; -using ConfectioneryContracts.StoragesContracts; -using ConfectioneryContracts.ViewModels; -using ConfectioneryFileImplement.Models; - -namespace ConfectioneryFileImplement.Implements -{ - public class PastryStorage : IPastryStorage - { - private readonly DataFileSingleton source; - public PastryStorage() - { - source = DataFileSingleton.GetInstance(); - } - public List GetFullList() - { - return source.Pastries - .Select(x => x.GetViewModel) - .ToList(); - } - - public List GetFilteredList(PastrySearchModel model) - { - if (string.IsNullOrEmpty(model.PastryName)) - { - return new(); - } - return source.Pastries - .Where(x => x.PastryName.Contains(model.PastryName)) - .Select(x => x.GetViewModel) - .ToList(); - } - - public PastryViewModel? GetElement(PastrySearchModel model) - { - if (string.IsNullOrEmpty(model.PastryName) && !model.Id.HasValue) - { - return null; - } - return source.Pastries.FirstOrDefault(x => (!string.IsNullOrEmpty( - model.PastryName) && x.PastryName == model.PastryName) || - (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; - } - - public PastryViewModel? Insert(PastryBindingModel model) - { - model.Id = source.Pastries.Count > 0 ? - source.Pastries.Max(x => x.Id) + 1 : 1; - var newPastry = Pastry.Create(model); - if (newPastry == null) - { - return null; - } - source.Pastries.Add(newPastry); - source.SavePastries(); - return newPastry.GetViewModel; - } - - public PastryViewModel? Update(PastryBindingModel model) - { - var Pastry = source.Pastries.FirstOrDefault(x => x.Id == model.Id); - if (Pastry == null) - { - return null; - } - Pastry.Update(model); - source.SavePastries(); - return Pastry.GetViewModel; - } - public PastryViewModel? Delete(PastryBindingModel model) - { - var Pastry = source.Pastries.FirstOrDefault(x => x.Id == model.Id); - if (Pastry != null) - { - source.Pastries.Remove(Pastry); - source.SavePastries(); - return Pastry.GetViewModel; - } - return null; - } - } -} \ No newline at end of file diff --git a/Confectionery/ConfectioneryFileImplement/Models/Component.cs b/Confectionery/ConfectioneryFileImplement/Models/Component.cs deleted file mode 100644 index bd01ea4..0000000 --- a/Confectionery/ConfectioneryFileImplement/Models/Component.cs +++ /dev/null @@ -1,58 +0,0 @@ -using ConfectioneryContracts.BindingModels; -using ConfectioneryContracts.ViewModels; -using ConfectioneryDataModels.Models; -using System.Xml.Linq; -namespace ConfectioneryFileImplement.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/Confectionery/ConfectioneryFileImplement/Models/Order.cs b/Confectionery/ConfectioneryFileImplement/Models/Order.cs deleted file mode 100644 index 1dd7492..0000000 --- a/Confectionery/ConfectioneryFileImplement/Models/Order.cs +++ /dev/null @@ -1,86 +0,0 @@ -using ConfectioneryContracts.BindingModels; -using ConfectioneryContracts.ViewModels; -using ConfectioneryDataModels.Enums; -using ConfectioneryDataModels.Models; -using System.Xml.Linq; - -namespace ConfectioneryFileImplement.Models -{ - public class Order : IOrderModel - { - public int Id { get; private set; } - public int PastryId { get; private set; } - public int Count { get; private set; } - public double Sum { get; private set; } - public OrderStatus Status { get; private set; } - public DateTime DateCreate { get; private set; } - public DateTime? DateImplement { get; private set; } - - public static Order? Create(OrderBindingModel model) - { - if (model == null) - { - return null; - } - return new Order() - { - Id = model.Id, - PastryId = model.PastryId, - 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; - } - return new Order() - { - Id = Convert.ToInt32(element.Attribute("Id")!.Value), - PastryId = Convert.ToInt32(element.Element("PastryId")!.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.ToString()), - DateCreate = Convert.ToDateTime( - element.Element("DateCreate")!.Value), - DateImplement = string.IsNullOrEmpty( - element.Element("DateImplement")!.Value) ? null : - Convert.ToDateTime(element.Element("DateImplement")!.Value) - }; - } - public void Update(OrderBindingModel model) - { - if (model == null) - { - return; - } - Status = model.Status; - DateImplement = model.DateImplement; - } - public OrderViewModel GetViewModel => new() - { - Id = Id, - PastryId = PastryId, - Count = Count, - Sum = Sum, - Status = Status, - DateCreate = DateCreate, - DateImplement = DateImplement, - }; - public XElement GetXElement => new("Order", - new XAttribute("Id", Id), - new XElement("PastryId", PastryId), - new XElement("Sum", Sum.ToString()), - new XElement("Count", Count), - new XElement("Status", Status.ToString()), - new XElement("DateCreate", DateCreate.ToString()), - new XElement("DateImplement", DateImplement.ToString()) - ); - } -} \ No newline at end of file diff --git a/Confectionery/ConfectioneryFileImplement/Models/Pastry.cs b/Confectionery/ConfectioneryFileImplement/Models/Pastry.cs deleted file mode 100644 index 7740b0a..0000000 --- a/Confectionery/ConfectioneryFileImplement/Models/Pastry.cs +++ /dev/null @@ -1,91 +0,0 @@ -using ConfectioneryContracts.BindingModels; -using ConfectioneryContracts.ViewModels; -using ConfectioneryDataModels.Models; -using System.Xml.Linq; -namespace ConfectioneryFileImplement.Models -{ - public class Pastry : IPastryModel - { - public int Id { get; private set; } - public string PastryName { get; private set; } = string.Empty; - public double Price { get; private set; } - public Dictionary Components { get; private set; } = new(); - private Dictionary? - _pastryComponents = null; - public Dictionary PastryComponents - { - get - { - if (_pastryComponents == null) - { - var source = DataFileSingleton.GetInstance(); - _pastryComponents = Components.ToDictionary( - x => x.Key, y => ((source.Components.FirstOrDefault( - z => z.Id == y.Key) as - IComponentModel)!, y.Value)); - } - return _pastryComponents; - } - } - public static Pastry? Create(PastryBindingModel model) - { - if (model == null) - { - return null; - } - return new Pastry() - { - Id = model.Id, - PastryName = model.PastryName, - Price = model.Price, - Components = model.PastryComponents.ToDictionary( - x => x.Key, x => x.Value.Item2) - }; - } - public static Pastry? Create(XElement element) - { - if (element == null) - { - return null; - } - return new Pastry() - { - Id = Convert.ToInt32(element.Attribute("Id")!.Value), - PastryName = element.Element("PastryName")!.Value, - Price = Convert.ToDouble(element.Element("Price")!.Value), - Components = element.Element( - "PastryComponents")!.Elements("PastryComponent") - .ToDictionary(x => Convert.ToInt32(x.Element("Key") - ?.Value), x => Convert.ToInt32(x.Element("Value")?.Value)) - }; - } - public void Update(PastryBindingModel model) - { - if (model == null) - { - return; - } - PastryName = model.PastryName; - Price = model.Price; - Components = model.PastryComponents.ToDictionary( - x => x.Key, x => x.Value.Item2); - _pastryComponents = null; - } - public PastryViewModel GetViewModel => new() - { - Id = Id, - PastryName = PastryName, - Price = Price, - PastryComponents = PastryComponents - }; - public XElement GetXElement => new("Pastry", - new XAttribute("Id", Id), - new XElement("PastryName", PastryName), - new XElement("Price", Price.ToString()), - new XElement("PastryComponents", Components.Select(x => - new XElement("PastryComponent", - new XElement("Key", x.Key), - new XElement("Value", x.Value))) - .ToArray())); - } -}