From ae8a20a5bb8f8aa80ea80631eb4d2a2051897f50 Mon Sep 17 00:00:00 2001 From: Oleg Shabunov Date: Sat, 20 Apr 2024 00:09:57 +0400 Subject: [PATCH] ListImplement and FileImplement --- .../DataFileSingleton.cs | 13 +++- .../Implements/MessageInfoStorage.cs | 56 ++++++++++++++ .../Models/MessageInfo.cs | 74 +++++++++++++++++++ AutoWorkshopImplement/DataListSingleton.cs | 3 + .../Implements/MessageInfoStorage.cs | 54 ++++++++++++++ AutoWorkshopImplement/Models/MessageInfo.cs | 47 ++++++++++++ 6 files changed, 243 insertions(+), 4 deletions(-) create mode 100644 AutoWorkshopFileImplement/Implements/MessageInfoStorage.cs create mode 100644 AutoWorkshopFileImplement/Models/MessageInfo.cs create mode 100644 AutoWorkshopImplement/Implements/MessageInfoStorage.cs create mode 100644 AutoWorkshopImplement/Models/MessageInfo.cs diff --git a/AutoWorkshopFileImplement/DataFileSingleton.cs b/AutoWorkshopFileImplement/DataFileSingleton.cs index 42fb3f1..971abd3 100644 --- a/AutoWorkshopFileImplement/DataFileSingleton.cs +++ b/AutoWorkshopFileImplement/DataFileSingleton.cs @@ -12,8 +12,9 @@ namespace AutoWorkshopFileImplement private readonly string RepairFileName = "Repair.xml"; private readonly string ClientFileName = "Client.xml"; private readonly string ImplementerFileName = "Implementer.xml"; + private readonly string MessageInfoFileName = "MessageInfo.xml"; - public List Components { get; private set; } + public List Components { get; private set; } public List Orders { get; private set; } @@ -23,14 +24,17 @@ namespace AutoWorkshopFileImplement public List Implementers { get; private set; } - private DataFileSingleton() + public List Messages { get; private set; } + + private DataFileSingleton() { Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; Repairs = LoadData(RepairFileName, "Repair", x => Repair.Create(x)!)!; Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!; Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!; - } + Messages = LoadData(MessageInfoFileName, "MessageInfo", x => MessageInfo.Create(x)!)!; + } public static DataFileSingleton GetInstance() { @@ -47,8 +51,9 @@ namespace AutoWorkshopFileImplement public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement); public void SaveClients() => SaveData(Clients, ClientFileName, "Clients", x => x.GetXElement); public void SaveImplementers() => SaveData(Implementers, ImplementerFileName, "Implementers", x => x.GetXElement); + public void SaveMessages() => SaveData(Orders, ImplementerFileName, "Messages", x => x.GetXElement); - private static List? LoadData(string FileName, string XmlNodeName, Func SelectFunction) + private static List? LoadData(string FileName, string XmlNodeName, Func SelectFunction) { if (File.Exists(FileName)) { diff --git a/AutoWorkshopFileImplement/Implements/MessageInfoStorage.cs b/AutoWorkshopFileImplement/Implements/MessageInfoStorage.cs new file mode 100644 index 0000000..94213a4 --- /dev/null +++ b/AutoWorkshopFileImplement/Implements/MessageInfoStorage.cs @@ -0,0 +1,56 @@ +using AutoWorkshopContracts.BindingModels; +using AutoWorkshopContracts.SearchModels; +using AutoWorkshopContracts.StoragesContracts; +using AutoWorkshopContracts.ViewModels; +using AutoWorkshopFileImplement.Models; + +namespace AutoWorkshopFileImplement.Implements +{ + public class MessageInfoStorage : IMessageInfoStorage + { + private readonly DataFileSingleton _source; + + public MessageInfoStorage() + { + _source = DataFileSingleton.GetInstance(); + } + + public List GetFullList() + { + return _source.Messages + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(MessageInfoSearchModel Model) + { + return _source.Messages + .Where(x => x.ClientId.HasValue && x.ClientId == Model.ClientId) + .Select(x => x.GetViewModel) + .ToList(); + } + + public MessageInfoViewModel? GetElement(MessageInfoSearchModel Model) + { + if (string.IsNullOrEmpty(Model.MessageId)) + return null; + + return _source.Messages + .FirstOrDefault(x => x.MessageId == Model.MessageId)? + .GetViewModel; + } + + public MessageInfoViewModel? Insert(MessageInfoBindingModel Model) + { + var NewMessageInfo = MessageInfo.Create(Model); + + if (NewMessageInfo == null) + return null; + + _source.Messages.Add(NewMessageInfo); + _source.SaveMessages(); + + return NewMessageInfo.GetViewModel; + } + } +} diff --git a/AutoWorkshopFileImplement/Models/MessageInfo.cs b/AutoWorkshopFileImplement/Models/MessageInfo.cs new file mode 100644 index 0000000..9982775 --- /dev/null +++ b/AutoWorkshopFileImplement/Models/MessageInfo.cs @@ -0,0 +1,74 @@ +using AutoWorkshopContracts.BindingModels; +using AutoWorkshopContracts.ViewModels; +using AutoWorkshopDataModels.Models; +using System.Xml.Linq; + +namespace AutoWorkshopFileImplement.Models +{ + public class MessageInfo : IMessageInfoModel + { + public string MessageId { get; set; } = string.Empty; + + public int? ClientId { get; set; } + + public string SenderName { get; set; } = string.Empty; + + public DateTime DateDelivery { get; set; } + + public string Subject { get; set; } = string.Empty; + + public string Body { get; set; } = string.Empty; + + public static MessageInfo? Create(MessageInfoBindingModel? Model) + { + if (Model == null) + return null; + + return new() + { + MessageId = Model.MessageId, + ClientId = Model.ClientId, + SenderName = Model.SenderName, + DateDelivery = Model.DateDelivery, + Subject = Model.Subject, + Body = Model.Body + }; + } + + public MessageInfoViewModel GetViewModel => new() + { + MessageId = MessageId, + ClientId = ClientId, + SenderName = SenderName, + DateDelivery = DateDelivery, + Subject = Subject, + Body = Body + }; + + public static MessageInfo? Create(XElement Element) + { + if (Element == null) + return null; + + return new() + { + MessageId = Element.Attribute("MessageId")!.Value, + ClientId = Convert.ToInt32(Element.Attribute("ClientId")!.Value), + SenderName = Element.Attribute("SenderName")!.Value, + DateDelivery = Convert.ToDateTime(Element.Attribute("DateDelivery")!.Value), + Subject = Element.Attribute("Subject")!.Value, + Body = Element.Attribute("Body")!.Value, + }; + } + + public XElement GetXElement => new( + "MessageInfo", + new XAttribute("MessageId", MessageId), + new XAttribute("ClientId", ClientId), + new XAttribute("SenderName", SenderName), + new XAttribute("DateDelivery", DateDelivery), + new XAttribute("Subject", Subject), + new XAttribute("Body", Body) + ); + } +} diff --git a/AutoWorkshopImplement/DataListSingleton.cs b/AutoWorkshopImplement/DataListSingleton.cs index 0ddc659..bfe201a 100644 --- a/AutoWorkshopImplement/DataListSingleton.cs +++ b/AutoWorkshopImplement/DataListSingleton.cs @@ -16,6 +16,8 @@ namespace AutoWorkshopListImplement public List Implementers { get; set; } + public List Messages { get; set; } + private DataListSingleton() { Components = new List(); @@ -23,6 +25,7 @@ namespace AutoWorkshopListImplement Repairs = new List(); Clients = new List(); Implementers = new List(); + Messages = new List(); } public static DataListSingleton GetInstance() diff --git a/AutoWorkshopImplement/Implements/MessageInfoStorage.cs b/AutoWorkshopImplement/Implements/MessageInfoStorage.cs new file mode 100644 index 0000000..397ccbb --- /dev/null +++ b/AutoWorkshopImplement/Implements/MessageInfoStorage.cs @@ -0,0 +1,54 @@ +using AutoWorkshopContracts.BindingModels; +using AutoWorkshopContracts.SearchModels; +using AutoWorkshopContracts.StoragesContracts; +using AutoWorkshopContracts.ViewModels; +using AutoWorkshopListImplement.Models; + +namespace AutoWorkshopListImplement.Implements +{ + public class MessageInfoStorage : IMessageInfoStorage + { + private readonly DataListSingleton _source; + + public MessageInfoStorage() + { + _source = DataListSingleton.GetInstance(); + } + + public List GetFullList() + { + return _source.Messages + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(MessageInfoSearchModel Model) + { + return _source.Messages + .Where(x => x.ClientId.HasValue && x.ClientId == Model.ClientId) + .Select(x => x.GetViewModel) + .ToList(); + } + + public MessageInfoViewModel? GetElement(MessageInfoSearchModel Model) + { + if (string.IsNullOrEmpty(Model.MessageId)) + return null; + + return _source.Messages + .FirstOrDefault(x => x.MessageId == Model.MessageId)? + .GetViewModel; + } + + public MessageInfoViewModel? Insert(MessageInfoBindingModel Model) + { + var NewMessageInfo = MessageInfo.Create(Model); + + if (NewMessageInfo == null) + return null; + + _source.Messages.Add(NewMessageInfo); + return NewMessageInfo.GetViewModel; + } + } +} diff --git a/AutoWorkshopImplement/Models/MessageInfo.cs b/AutoWorkshopImplement/Models/MessageInfo.cs new file mode 100644 index 0000000..59a5796 --- /dev/null +++ b/AutoWorkshopImplement/Models/MessageInfo.cs @@ -0,0 +1,47 @@ +using AutoWorkshopContracts.BindingModels; +using AutoWorkshopContracts.ViewModels; +using AutoWorkshopDataModels.Models; + +namespace AutoWorkshopListImplement.Models +{ + public class MessageInfo : IMessageInfoModel + { + public string MessageId { get; set; } = string.Empty; + + public int? ClientId { get; set; } + + public string SenderName { get; set; } = string.Empty; + + public DateTime DateDelivery { get; set; } + + public string Subject { get; set; } = string.Empty; + + public string Body { get; set; } = string.Empty; + + public static MessageInfo? Create(MessageInfoBindingModel? Model) + { + if (Model == null) + return null; + + return new() + { + MessageId = Model.MessageId, + ClientId = Model.ClientId, + SenderName = Model.SenderName, + DateDelivery = Model.DateDelivery, + Subject = Model.Subject, + Body = Model.Body + }; + } + + public MessageInfoViewModel GetViewModel => new() + { + MessageId = MessageId, + ClientId = ClientId, + SenderName = SenderName, + DateDelivery = DateDelivery, + Subject = Subject, + Body = Body + }; + } +}