diff --git a/FoodOrders/FoodOrdersDatabaseImplement/Models/MessageInfo.cs b/FoodOrders/FoodOrdersDatabaseImplement/Models/MessageInfo.cs index a975fcf..468c407 100644 --- a/FoodOrders/FoodOrdersDatabaseImplement/Models/MessageInfo.cs +++ b/FoodOrders/FoodOrdersDatabaseImplement/Models/MessageInfo.cs @@ -22,7 +22,7 @@ namespace FoodOrdersDatabaseImplement.Models public virtual Client? Client { get; set; } public bool HasRead { get; private set; } public string? Reply { get; private set; } - public static MessageInfo? Create(MessageInfoBindingModel model) + public static MessageInfo? Create(MessageInfoBindingModel model) { if (model == null) { @@ -35,10 +35,13 @@ namespace FoodOrdersDatabaseImplement.Models HasRead = model.HasRead, Subject = model.Subject, ClientId = model.ClientId, - MessageId = model.MessageId, - SenderName = model.SenderName, - DateDelivery = model.DateDelivery, - }; + MessageId = model.MessageId, + ClientId = model.ClientId, + SenderName = model.SenderName, + Body = model.Body, + Subject = model.Subject, + DateDelivery = model.DateDelivery, + }; } public void Update(MessageInfoBindingModel model) { @@ -50,16 +53,19 @@ namespace FoodOrdersDatabaseImplement.Models HasRead = model.HasRead; } - public MessageInfoViewModel GetViewModel => new() - { + public MessageInfoViewModel GetViewModel => new() + { Body = Body, Reply = Reply, HasRead = HasRead, Subject = Subject, ClientId = ClientId, - MessageId = MessageId, - SenderName = SenderName, - DateDelivery = DateDelivery, - }; - } + MessageId = MessageId, + ClientId = ClientId, + SenderName = SenderName, + Body = Body, + Subject = Subject, + DateDelivery = DateDelivery, + }; + } } diff --git a/FoodOrders/FoodOrdersFileImplement/DataFileSingleton.cs b/FoodOrders/FoodOrdersFileImplement/DataFileSingleton.cs index 4321083..b2bed98 100644 --- a/FoodOrders/FoodOrdersFileImplement/DataFileSingleton.cs +++ b/FoodOrders/FoodOrdersFileImplement/DataFileSingleton.cs @@ -10,6 +10,7 @@ namespace FoodOrdersFileImplement private readonly string DishFileName = "Dish.xml"; private readonly string ClientFileName = "Clients.xml"; private readonly string ImplementerFileName = "Implementer.xml"; + private readonly string MessageInfoFileName = "MessageInfo.xml"; private readonly string ShopFileName = "Shop.xml"; public List Components { get; private set; } public List Orders { get; private set; } @@ -17,6 +18,7 @@ namespace FoodOrdersFileImplement public List Shops { get; private set; } public List Clients { get; private set; } public List Implementers { get; private set; } + public List Messages { get; private set; } public static DataFileSingleton GetInstance() { @@ -32,6 +34,7 @@ namespace FoodOrdersFileImplement public void SaveShops() => SaveData(Shops, ShopFileName, "Shops", x => x.GetXElement); public void SaveClients() => SaveData(Clients, ClientFileName, "Clients", x => x.GetXElement); public void SaveImplementer() => SaveData(Implementers, ImplementerFileName, "Implementer", x => x.GetXElement); + public void SaveMessages() => SaveData(Orders, ImplementerFileName, "Messages", x => x.GetXElement); private DataFileSingleton() { Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; @@ -40,6 +43,7 @@ namespace FoodOrdersFileImplement Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!; Shops = LoadData(ShopFileName, "Shop", x => Shop.Create(x)!)!; Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!; + Messages = LoadData(MessageInfoFileName, "MessageInfo", x => MessageInfo.Create(x)!)!; } private static List? LoadData(string filename, string xmlNodeName, Func selectFunction) { diff --git a/FoodOrders/FoodOrdersFileImplement/Implements/MessageInfoStorage.cs b/FoodOrders/FoodOrdersFileImplement/Implements/MessageInfoStorage.cs index e462713..28cae9f 100644 --- a/FoodOrders/FoodOrdersFileImplement/Implements/MessageInfoStorage.cs +++ b/FoodOrders/FoodOrdersFileImplement/Implements/MessageInfoStorage.cs @@ -2,29 +2,52 @@ using FoodOrdersContracts.SearchModels; using FoodOrdersContracts.StoragesContracts; using FoodOrdersContracts.ViewModels; +using FoodOrdersFileImplement.Models; namespace FoodOrdersFileImplement.Implements { public class MessageInfoStorage : IMessageInfoStorage { + private readonly DataFileSingleton _source; + public MessageInfoStorage() + { + _source = DataFileSingleton.GetInstance(); + } + public MessageInfoViewModel? GetElement(MessageInfoSearchModel model) { - throw new NotImplementedException(); + if (model.MessageId != null) + { + return _source.Messages.FirstOrDefault(x => x.MessageId == model.MessageId)?.GetViewModel; + } + return null; } public List GetFilteredList(MessageInfoSearchModel model) { - throw new NotImplementedException(); + return _source.Messages + .Where(x => x.ClientId == model.ClientId) + .Select(x => x.GetViewModel) + .ToList(); } public List GetFullList() { - throw new NotImplementedException(); + return _source.Messages + .Select(x => x.GetViewModel) + .ToList(); } public MessageInfoViewModel? Insert(MessageInfoBindingModel model) { - throw new NotImplementedException(); + var newMessage = MessageInfo.Create(model); + if (newMessage == null) + { + return null; + } + _source.Messages.Add(newMessage); + _source.SaveMessages(); + return newMessage.GetViewModel; } public MessageInfoViewModel? Update(MessageInfoBindingModel model) diff --git a/FoodOrders/FoodOrdersListImplement/DataListSingleton.cs b/FoodOrders/FoodOrdersListImplement/DataListSingleton.cs index d8b99a4..735748f 100644 --- a/FoodOrders/FoodOrdersListImplement/DataListSingleton.cs +++ b/FoodOrders/FoodOrdersListImplement/DataListSingleton.cs @@ -1,4 +1,5 @@ using FoodOrdersListImplement.Models; +using static System.Formats.Asn1.AsnWriter; namespace FoodOrdersListImplement { @@ -11,6 +12,7 @@ namespace FoodOrdersListImplement public List Shops { get; set; } public List Clients { get; set; } public List Implementers { get; set; } + public List Messages { get; set; } private DataListSingleton() { Components = new List(); @@ -19,6 +21,7 @@ namespace FoodOrdersListImplement Clients = new List(); Shops = new List(); Implementers = new List(); + Messages = new List(); } public static DataListSingleton GetInstance() { diff --git a/FoodOrders/FoodOrdersListImplement/Implements/MessageInfoStorage.cs b/FoodOrders/FoodOrdersListImplement/Implements/MessageInfoStorage.cs index 5e2aa4f..3bc96c6 100644 --- a/FoodOrders/FoodOrdersListImplement/Implements/MessageInfoStorage.cs +++ b/FoodOrders/FoodOrdersListImplement/Implements/MessageInfoStorage.cs @@ -2,29 +2,60 @@ using FoodOrdersContracts.SearchModels; using FoodOrdersContracts.StoragesContracts; using FoodOrdersContracts.ViewModels; +using FoodOrdersListImplement.Models; namespace FoodOrdersListImplement.Implements { public class MessageInfoStorage : IMessageInfoStorage { + private readonly DataListSingleton _source; + public MessageInfoStorage() + { + _source = DataListSingleton.GetInstance(); + } + public MessageInfoViewModel? GetElement(MessageInfoSearchModel model) { - throw new NotImplementedException(); + foreach (var message in _source.Messages) + { + if (model.MessageId != null && model.MessageId.Equals(message.MessageId)) + return message.GetViewModel; + } + return null; } public List GetFilteredList(MessageInfoSearchModel model) { - throw new NotImplementedException(); + List result = new(); + foreach (var item in _source.Messages) + { + if (item.ClientId.HasValue && item.ClientId == model.ClientId) + { + result.Add(item.GetViewModel); + } + } + return result; } public List GetFullList() { - throw new NotImplementedException(); + List result = new(); + foreach (var item in _source.Messages) + { + result.Add(item.GetViewModel); + } + return result; } public MessageInfoViewModel? Insert(MessageInfoBindingModel model) { - throw new NotImplementedException(); + var newMessage = MessageInfo.Create(model); + if (newMessage == null) + { + return null; + } + _source.Messages.Add(newMessage); + return newMessage.GetViewModel; } public MessageInfoViewModel? Update(MessageInfoBindingModel model)