This commit is contained in:
Вячеслав Иванов 2024-04-02 17:35:50 +04:00
parent b61a40fb5a
commit 248ba0e38d
6 changed files with 155 additions and 92 deletions

View File

@ -16,11 +16,13 @@ namespace PizzeriaFileImplement
private readonly string PizzaFileName = "Pizza.xml"; private readonly string PizzaFileName = "Pizza.xml";
private readonly string ClientFileName = "Client.xml"; private readonly string ClientFileName = "Client.xml";
private readonly string ImplementerFileName = "Implementer.xml"; private readonly string ImplementerFileName = "Implementer.xml";
private readonly string MessageInfoFileName = "MessageInfo.xml";
public List<Component> Components { get; private set; } public List<Component> Components { get; private set; }
public List<Order> Orders { get; private set; } public List<Order> Orders { get; private set; }
public List<Pizza> Pizzas { get; private set; } public List<Pizza> Pizzas { get; private set; }
public List<Client> Clients { get; private set; } public List<Client> Clients { get; private set; }
public List<Implementer> Implementers { get; private set; } public List<Implementer> Implementers { get; private set; }
public List<MessageInfo> Messages { get; private set; }
public static DataFileSingleton GetInstance() public static DataFileSingleton GetInstance()
@ -37,6 +39,7 @@ namespace PizzeriaFileImplement
public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement); public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement);
public void SaveClients() => SaveData(Clients, ClientFileName, "Clients", 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 SaveImplementers() => SaveData(Implementers, ImplementerFileName, "Implementers", x => x.GetXElement);
public void SaveMessages() => SaveData(Orders, ImplementerFileName, "Messages", x => x.GetXElement);
private DataFileSingleton() private DataFileSingleton()
{ {
@ -45,6 +48,7 @@ namespace PizzeriaFileImplement
Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!; Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!;
Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!; Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!;
Messages = LoadData(MessageInfoFileName, "MessageInfo", x => MessageInfo.Create(x)!)!;
} }
private static List<T>? LoadData<T>(string filename, string xmlNodeName, Func<XElement, T> selectFunction) private static List<T>? LoadData<T>(string filename, string xmlNodeName, Func<XElement, T> selectFunction)

View File

@ -6,89 +6,43 @@ using PizzeriaFileImplement.Models;
namespace PizzeriaFileImplement.Implements namespace PizzeriaFileImplement.Implements
{ {
public class ImplementerStorage : IImplementerStorage public class MessageInfoStorage : IMessageInfoStorage
{ {
private readonly DataFileSingleton _source; private readonly DataFileSingleton _source;
public ImplementerStorage() public MessageInfoStorage()
{ {
_source = DataFileSingleton.GetInstance(); _source = DataFileSingleton.GetInstance();
} }
public List<ImplementerViewModel> GetFullList() public List<MessageInfoViewModel> GetFullList()
{ {
return _source.Implementers.Select(x => x.GetViewModel).ToList(); return _source.Messages.Select(x => x.GetViewModel).ToList();
} }
public List<ImplementerViewModel> GetFilteredList(ImplementerSearchModel model) public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
{ {
if (model == null) return _source.Messages.Where(x => x.ClientId == model.ClientId).Select(x => x.GetViewModel).ToList();
{
return new();
}
if (model.Id.HasValue)
{
var res = GetElement(model);
return res != null ? new() { res } : new();
}
if (model.ImplementerFIO != null)
{
return _source.Implementers
.Where(x => x.ImplementerFIO.Equals(model.ImplementerFIO))
.Select(x => x.GetViewModel)
.ToList();
}
return new();
} }
public ImplementerViewModel? GetElement(ImplementerSearchModel model) public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
{ {
if (model.Id.HasValue) if (model.MessageId != null)
{ {
return _source.Implementers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; return _source.Messages.FirstOrDefault(x => x.MessageId == model.MessageId)?.GetViewModel;
}
if (model.ImplementerFIO != null && model.Password != null)
{
return _source.Implementers.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO) && x.Password.Equals(model.Password))?.GetViewModel;
}
if (model.ImplementerFIO != null)
{
return _source.Implementers.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO))?.GetViewModel;
} }
return null; return null;
} }
public ImplementerViewModel? Insert(ImplementerBindingModel model) public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
{ {
model.Id = _source.Implementers.Count > 0 ? _source.Implementers.Max(x => x.Id) + 1 : 1; var newMessage = MessageInfo.Create(model);
var res = Implementer.Create(model); if (newMessage == null)
if (res != null)
{ {
_source.Implementers.Add(res); return null;
_source.SaveImplementers();
} }
return res?.GetViewModel; _source.Messages.Add(newMessage);
} _source.SaveMessages();
return newMessage.GetViewModel;
public ImplementerViewModel? Update(ImplementerBindingModel model)
{
var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id);
if (res != null)
{
res.Update(model);
_source.SaveImplementers();
}
return res?.GetViewModel;
}
public ImplementerViewModel? Delete(ImplementerBindingModel model)
{
var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id);
if (res != null)
{
_source.Implementers.Remove(res);
_source.SaveImplementers();
}
return res?.GetViewModel;
} }
} }
} }

View File

@ -10,7 +10,7 @@ using System.Xml.Linq;
namespace PizzeriaFileImplement.Models namespace PizzeriaFileImplement.Models
{ {
public class Message : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
public string MessageId { get; private set; } = string.Empty; public string MessageId { get; private set; } = string.Empty;
@ -24,11 +24,7 @@ namespace PizzeriaFileImplement.Models
public string Body { get; private set; } = string.Empty; public string Body { get; private set; } = string.Empty;
public bool HasRead { get; private set; } public static MessageInfo? Create(MessageInfoBindingModel model)
public string? Reply { get; private set; }
public static Message? Create(MessageInfoBindingModel model)
{ {
if (model == null) if (model == null)
{ {
@ -38,14 +34,14 @@ namespace PizzeriaFileImplement.Models
{ {
Body = model.Body, Body = model.Body,
Subject = model.Subject, Subject = model.Subject,
DateDelivery = model.DateDelivery,
SenderName = model.SenderName,
ClientId = model.ClientId, ClientId = model.ClientId,
MessageId = model.MessageId MessageId = model.MessageId,
SenderName = model.SenderName,
DateDelivery = model.DateDelivery,
}; };
} }
public static Message? Create(XElement element) public static MessageInfo? Create(XElement element)
{ {
if (element == null) if (element == null)
{ {
@ -55,40 +51,26 @@ namespace PizzeriaFileImplement.Models
{ {
Body = element.Attribute("Body")!.Value, Body = element.Attribute("Body")!.Value,
Subject = element.Attribute("Subject")!.Value, Subject = element.Attribute("Subject")!.Value,
DateDelivery = Convert.ToDateTime(element.Attribute("DateDelivery")!.Value),
SenderName = element.Attribute("SenderName")!.Value,
ClientId = Convert.ToInt32(element.Attribute("ClientId")!.Value), ClientId = Convert.ToInt32(element.Attribute("ClientId")!.Value),
MessageId = element.Attribute("MessageId")!.Value, MessageId = element.Attribute("MessageId")!.Value,
SenderName = element.Attribute("SenderName")!.Value,
DateDelivery = Convert.ToDateTime(element.Attribute("DateDelivery")!.Value),
}; };
} }
public void Update(MessageInfoBindingModel model)
{
if (model == null)
{
return;
}
Reply = model.Reply;
HasRead = model.HasRead;
}
public MessageInfoViewModel GetViewModel => new() public MessageInfoViewModel GetViewModel => new()
{ {
Body = Body, Body = Body,
Subject = Subject, Subject = Subject,
Reply = Reply,
HasRead = HasRead,
DateDelivery = DateDelivery,
SenderName = SenderName,
ClientId = ClientId, ClientId = ClientId,
MessageId = MessageId MessageId = MessageId,
SenderName = SenderName,
DateDelivery = DateDelivery,
}; };
public XElement GetXElement => new("MessageInfo", public XElement GetXElement => new("MessageInfo",
new XAttribute("Subject", Subject),
new XAttribute("Body", Body), new XAttribute("Body", Body),
new XAttribute("Reply", Reply), new XAttribute("Subject", Subject),
new XAttribute("HasRead", HasRead),
new XAttribute("ClientId", ClientId), new XAttribute("ClientId", ClientId),
new XAttribute("MessageId", MessageId), new XAttribute("MessageId", MessageId),
new XAttribute("SenderName", SenderName), new XAttribute("SenderName", SenderName),

View File

@ -15,6 +15,7 @@ namespace PizzeriaListImplement
public List<Pizza> Pizzas { get; set; } public List<Pizza> Pizzas { get; set; }
public List<Client> Clients { get; set; } public List<Client> Clients { get; set; }
public List<Implementer> Implementers { get; set; } public List<Implementer> Implementers { get; set; }
public List<MessageInfo> Messages { get; set; }
private DataListSingleton() private DataListSingleton()
{ {
@ -23,6 +24,7 @@ namespace PizzeriaListImplement
Pizzas = new List<Pizza>(); Pizzas = new List<Pizza>();
Clients = new List<Client>(); Clients = new List<Client>();
Implementers = new List<Implementer>(); Implementers = new List<Implementer>();
Messages = new List<MessageInfo>();
} }
public static DataListSingleton GetInstance() public static DataListSingleton GetInstance()

View File

@ -0,0 +1,68 @@
using PizzeriaContracts.BindingModels;
using PizzeriaContracts.SearchModels;
using PizzeriaContracts.StoragesContracts;
using PizzeriaContracts.ViewModels;
using PizzeriaListImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaListImplement.Implements
{
public class MessageInfoStorage : IMessageInfoStorage
{
private readonly DataListSingleton _source;
public MessageInfoStorage()
{
_source = DataListSingleton.GetInstance();
}
public List<MessageInfoViewModel> GetFullList()
{
List<MessageInfoViewModel> result = new();
foreach (var item in _source.Messages)
{
result.Add(item.GetViewModel);
}
return result;
}
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
{
List<MessageInfoViewModel> result = new();
foreach (var item in _source.Messages)
{
if (item.ClientId.HasValue && item.ClientId == model.ClientId)
{
result.Add(item.GetViewModel);
}
}
return result;
}
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
{
foreach (var message in _source.Messages)
{
if (model.MessageId != null && model.MessageId.Equals(message.MessageId))
{
return message.GetViewModel;
}
}
return null;
}
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
{
var newMessage = MessageInfo.Create(model);
if (newMessage == null)
{
return null;
}
_source.Messages.Add(newMessage);
return newMessage.GetViewModel;
}
}
}

View File

@ -0,0 +1,53 @@
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;
namespace PizzeriaListImplement.Models
{
public class MessageInfo : IMessageInfoModel
{
public string MessageId { get; private set; } = string.Empty;
public int? ClientId { get; private set; }
public string SenderName { get; private set; } = string.Empty;
public DateTime DateDelivery { get; private set; } = DateTime.Now;
public string Subject { get; private set; } = string.Empty;
public string Body { get; private set; } = string.Empty;
public static MessageInfo? Create(MessageInfoBindingModel model)
{
if (model == null)
{
return null;
}
return new()
{
Body = model.Body,
Subject = model.Subject,
ClientId = model.ClientId,
MessageId = model.MessageId,
SenderName = model.SenderName,
DateDelivery = model.DateDelivery,
};
}
public MessageInfoViewModel GetViewModel => new()
{
Body = Body,
Subject = Subject,
ClientId = ClientId,
MessageId = MessageId,
SenderName = SenderName,
DateDelivery = DateDelivery,
};
}
}