Реализовал хранилище исполнителей в файле

This commit is contained in:
Никита Потапов 2024-04-20 14:51:30 +04:00
parent b752932b60
commit 91e37358dc
4 changed files with 165 additions and 5 deletions

View File

@ -10,10 +10,12 @@ namespace SecuritySystemFileImplement
private readonly string OrderFileName = "Order.xml";
private readonly string SecureFileName = "Secure.xml";
private readonly string ClientFileName = "Client.xml";
private readonly string ImplementerFileName = "Implementer.xml";
public List<Component> Components { get; private set; }
public List<Order> Orders { get; private set; }
public List<Secure> Secures { get; private set; }
public List<Client> Clients { get; private set; }
public List<Implementer> Implementers { get; private set; }
public static DataFileSingleton GetInstance()
{
if (instance == null)
@ -26,15 +28,16 @@ namespace SecuritySystemFileImplement
public void SaveSecures() => SaveData(Secures, SecureFileName, "Secures", 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 SaveImplementers() => SaveData(Implementers, ImplementerFileName, "Implementers", x => x.GetXElement);
private DataFileSingleton()
{
Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!;
Secures = LoadData(SecureFileName, "Secure", x => Secure.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)!)!;
}
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)
{
if (File.Exists(filename))
{

View File

@ -0,0 +1,85 @@
using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.SearchModels;
using SecuritySystemContracts.StoragesContracts;
using SecuritySystemContracts.ViewModels;
using SecuritySystemFileImplement.Models;
namespace SecuritySystemFileImplement.Implements
{
public class ImplementerStorage : IImplementerStorage
{
private readonly DataFileSingleton source;
public ImplementerStorage()
{
source = DataFileSingleton.GetInstance();
}
public List<ImplementerViewModel> GetFullList()
{
return source.Implementers.Select(x => x.GetViewModel).ToList();
}
public List<ImplementerViewModel> GetFilteredList(ImplementerSearchModel model)
{
var clients = source.Implementers
.Select(x => x.GetViewModel)
.ToList();
if (model.Id.HasValue)
{
clients = clients.Where(x => x.Id == model.Id.Value).ToList();
}
if (model.Password != null)
{
clients = clients.Where(x => x.Password == model.Password).ToList();
}
if (model.ImplementerFIO != null)
{
clients = clients.Where(x => x.ImplementerFIO == model.ImplementerFIO).ToList();
}
return clients;
}
public ImplementerViewModel? GetElement(ImplementerSearchModel model)
{
return GetFilteredList(model).FirstOrDefault();
}
public ImplementerViewModel? Insert(ImplementerBindingModel model)
{
model.Id = source.Implementers.Count > 0 ? source.Implementers.Max(x => x.Id) + 1 : 1;
var newImplementer = Implementer.Create(model);
if (newImplementer == null)
{
return null;
}
source.Implementers.Add(newImplementer);
source.SaveImplementers();
return newImplementer.GetViewModel;
}
public ImplementerViewModel? Update(ImplementerBindingModel model)
{
var client = source.Implementers.FirstOrDefault(x => x.Id == model.Id);
if (client == null)
{
return null;
}
client.Update(model);
source.SaveImplementers();
return client.GetViewModel;
}
public ImplementerViewModel? Delete(ImplementerBindingModel model)
{
var element = source.Implementers.FirstOrDefault(x => x.Id == model.Id);
if (element != null)
{
source.Implementers.Remove(element);
source.SaveImplementers();
return element.GetViewModel;
}
return null;
}
}
}

View File

@ -36,9 +36,9 @@ namespace SecuritySystemFileImplement.Models
return new Client()
{
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
Email = Convert.ToString(element.Attribute("Email")!.Value),
Password = Convert.ToString(element.Attribute("Password")!.Value),
ClientFIO = Convert.ToString(element.Attribute("ClientFIO")!.Value)
Email = Convert.ToString(element.Element("Email")!.Value),
Password = Convert.ToString(element.Element("Password")!.Value),
ClientFIO = Convert.ToString(element.Element("ClientFIO")!.Value)
};
}
public void Update(ClientBindingModel model)

View File

@ -0,0 +1,72 @@
using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.ViewModels;
using SecuritySystemDataModels.Models;
using System.Xml.Linq;
namespace SecuritySystemFileImplement.Models
{
public class Implementer : IImplementerModel
{
public string ImplementerFIO { get; private set; } = string.Empty;
public string Password { get; private set; } = string.Empty;
public int WorkExperience { get; private set; }
public int Qualification { get; private set; }
public int Id { get; private set; }
public static Implementer? Create(ImplementerBindingModel model)
{
if (model == null)
{
return null;
}
return new Implementer()
{
Id = model.Id,
Qualification = model.Qualification,
Password = model.Password,
ImplementerFIO = model.ImplementerFIO,
WorkExperience = model.WorkExperience
};
}
public static Implementer? Create(XElement element)
{
if (element == null)
{
return null;
}
return new Implementer()
{
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
Qualification = Convert.ToInt32(element.Element("Qualification")!.Value),
Password = Convert.ToString(element.Element("Password")!.Value),
ImplementerFIO = Convert.ToString(element.Element("ImplementerFIO")!.Value),
WorkExperience = Convert.ToInt32(element.Element("WorkExperience")!.Value)
};
}
public void Update(ImplementerBindingModel model)
{
if (model == null)
{
return;
}
Qualification = model.Qualification;
Password = model.Password;
ImplementerFIO = model.ImplementerFIO;
WorkExperience = model.WorkExperience;
}
public ImplementerViewModel GetViewModel => new()
{
Id = Id,
Qualification = Qualification,
Password = Password,
ImplementerFIO = ImplementerFIO,
WorkExperience = WorkExperience
};
public XElement GetXElement => new("Сlient",
new XAttribute("Id", Id),
new XElement("Qualification", Qualification),
new XElement("Password", Password),
new XElement("ImplementerFIO", ImplementerFIO),
new XElement("WorkExperience", WorkExperience)
);
}
}