From 003c54db7d493a00c7a82fd8a839d1d171adcf02 Mon Sep 17 00:00:00 2001 From: Viltskaa Date: Sun, 9 Apr 2023 23:25:46 +0400 Subject: [PATCH] Add implementer --- .../BindingModels/ImplementerBindingModel.cs | 12 ++ .../BindingModels/OrderBindingModel.cs | 1 + .../IImplementerLogic.cs | 13 +++ .../SearchModels/ImplementerSearchModel.cs | 10 ++ .../SearchModels/OrderSearchModel.cs | 1 + .../StoragesContracts/IImplementerStorage.cs | 15 +++ .../ViewModels/ImplementerViewModel.cs | 20 ++++ .../ViewModels/OrderViewModel.cs | 4 + .../Implements/ImplementerStorage.cs | 81 +++++++++++++ .../Models/Implementer.cs | 64 +++++++++++ .../SushiBarDatabaseImplement/Models/Order.cs | 9 +- .../SushiBarDatabase.cs | 1 + .../DataFileSingleton.cs | 11 +- .../Implements/ImplementerStorage.cs | 89 +++++++++++++++ .../Models/Implementer.cs | 77 +++++++++++++ .../SushiBarFileImplement/Models/Order.cs | 8 ++ .../Models/IImplementerModel.cs | 9 ++ .../DataListSingleton.cs | 3 + .../Implements/ImplementerStorage.cs | 106 ++++++++++++++++++ .../Models/Implementer.cs | 42 +++++++ 20 files changed, 572 insertions(+), 4 deletions(-) create mode 100644 SushiBar/SushiBarContracts/BindingModels/ImplementerBindingModel.cs create mode 100644 SushiBar/SushiBarContracts/BusinessLogicsContracts/IImplementerLogic.cs create mode 100644 SushiBar/SushiBarContracts/SearchModels/ImplementerSearchModel.cs create mode 100644 SushiBar/SushiBarContracts/StoragesContracts/IImplementerStorage.cs create mode 100644 SushiBar/SushiBarContracts/ViewModels/ImplementerViewModel.cs create mode 100644 SushiBar/SushiBarDatabaseImplement/Implements/ImplementerStorage.cs create mode 100644 SushiBar/SushiBarDatabaseImplement/Models/Implementer.cs create mode 100644 SushiBar/SushiBarFileImplement/Implements/ImplementerStorage.cs create mode 100644 SushiBar/SushiBarFileImplement/Models/Implementer.cs create mode 100644 SushiBar/SushiBarModels/Models/IImplementerModel.cs create mode 100644 SushiBar/SushibarListImplement/Implements/ImplementerStorage.cs create mode 100644 SushiBar/SushibarListImplement/Models/Implementer.cs diff --git a/SushiBar/SushiBarContracts/BindingModels/ImplementerBindingModel.cs b/SushiBar/SushiBarContracts/BindingModels/ImplementerBindingModel.cs new file mode 100644 index 0000000..0266055 --- /dev/null +++ b/SushiBar/SushiBarContracts/BindingModels/ImplementerBindingModel.cs @@ -0,0 +1,12 @@ +using SushiBarDataModels.Models; + +namespace SushiBarContracts.BindingModels; + +public class ImplementerBindingModel : IImplementerModel +{ + public int Id { get; set; } + public string ImplementerFio { get; set; } = string.Empty; + public string Password { get; set; } = string.Empty; + public int WorkExperience { get; set; } + public int Qualification { get; set; } +} \ No newline at end of file diff --git a/SushiBar/SushiBarContracts/BindingModels/OrderBindingModel.cs b/SushiBar/SushiBarContracts/BindingModels/OrderBindingModel.cs index b222b27..43c71b8 100644 --- a/SushiBar/SushiBarContracts/BindingModels/OrderBindingModel.cs +++ b/SushiBar/SushiBarContracts/BindingModels/OrderBindingModel.cs @@ -8,6 +8,7 @@ namespace SushiBarContracts.BindingModels public int Id { get; set; } public int SushiId { get; set; } public int ClientId { get; set; } + public int ImplementerId { get; set; } public string ClientFio { get; set; } = string.Empty; public string SushiName { get; set; } = string.Empty; public int Count { get; set; } diff --git a/SushiBar/SushiBarContracts/BusinessLogicsContracts/IImplementerLogic.cs b/SushiBar/SushiBarContracts/BusinessLogicsContracts/IImplementerLogic.cs new file mode 100644 index 0000000..d94baa4 --- /dev/null +++ b/SushiBar/SushiBarContracts/BusinessLogicsContracts/IImplementerLogic.cs @@ -0,0 +1,13 @@ +using SushiBarContracts.SearchModels; +using SushiBarContracts.ViewModels; + +namespace SushiBarContracts.BusinessLogicsContracts; + +public interface IImplementerLogic +{ + List? ReadList(ImplementerSearchModel? model); + ImplementerViewModel? ReadElement(ImplementerSearchModel model); + bool Create(ImplementerSearchModel model); + bool Update(ImplementerSearchModel model); + bool Delete(ImplementerSearchModel model); +} \ No newline at end of file diff --git a/SushiBar/SushiBarContracts/SearchModels/ImplementerSearchModel.cs b/SushiBar/SushiBarContracts/SearchModels/ImplementerSearchModel.cs new file mode 100644 index 0000000..1ed6adf --- /dev/null +++ b/SushiBar/SushiBarContracts/SearchModels/ImplementerSearchModel.cs @@ -0,0 +1,10 @@ +namespace SushiBarContracts.SearchModels; + +public class ImplementerSearchModel +{ + public int? Id { get; set; } + public string? ImplementerFio { get; set; } + public string? Password { get; set; } + public int? WorkExperience { get; set; } + public int? Qualification { get; set; } +} \ No newline at end of file diff --git a/SushiBar/SushiBarContracts/SearchModels/OrderSearchModel.cs b/SushiBar/SushiBarContracts/SearchModels/OrderSearchModel.cs index 862e85f..b1a1f0c 100644 --- a/SushiBar/SushiBarContracts/SearchModels/OrderSearchModel.cs +++ b/SushiBar/SushiBarContracts/SearchModels/OrderSearchModel.cs @@ -6,5 +6,6 @@ public DateTime? DateFrom { get; set; } public DateTime? DateTo { get; set; } public int? ClientId { get; set; } + public int? ImplementerId { get; set; } } } diff --git a/SushiBar/SushiBarContracts/StoragesContracts/IImplementerStorage.cs b/SushiBar/SushiBarContracts/StoragesContracts/IImplementerStorage.cs new file mode 100644 index 0000000..191c2e8 --- /dev/null +++ b/SushiBar/SushiBarContracts/StoragesContracts/IImplementerStorage.cs @@ -0,0 +1,15 @@ +using SushiBarContracts.BindingModels; +using SushiBarContracts.SearchModels; +using SushiBarContracts.ViewModels; + +namespace SushiBarContracts.StoragesContracts; + +public interface IImplementerStorage +{ + List GetFullList(); + List GetFilteredList(ImplementerSearchModel? model); + ImplementerViewModel? GetElement(ImplementerSearchModel? model); + ImplementerViewModel? Insert(ImplementerBindingModel model); + ImplementerViewModel? Update(ImplementerBindingModel model); + ImplementerViewModel? Delete(ImplementerBindingModel model); +} \ No newline at end of file diff --git a/SushiBar/SushiBarContracts/ViewModels/ImplementerViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/ImplementerViewModel.cs new file mode 100644 index 0000000..20c5a96 --- /dev/null +++ b/SushiBar/SushiBarContracts/ViewModels/ImplementerViewModel.cs @@ -0,0 +1,20 @@ +using System.ComponentModel; +using SushiBarDataModels.Models; + +namespace SushiBarContracts.ViewModels; + +public class ImplementerViewModel : IImplementerModel +{ + public int Id { get; init; } + + [DisplayName("Implementer FIO")] + public string ImplementerFio { get; set; } = string.Empty; + + public string Password { get; set; } = string.Empty; + + [DisplayName("Work Experience")] + public int WorkExperience { get; set; } + + [DisplayName("Qualification")] + public int Qualification { get; set; } +} \ No newline at end of file diff --git a/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs index 427d445..2a55c2e 100644 --- a/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs @@ -11,10 +11,14 @@ namespace SushiBarContracts.ViewModels public int SushiId { get; init; } public int ClientId { get; init; } + public int ImplementerId { get; set; } [DisplayName("Client FIO")] public string ClientFio { get; init; } = string.Empty; + [DisplayName("Implementer FIO")] + public string ImplementerFio { get; set; } = string.Empty; + [DisplayName("Name of Product")] public string SushiName { get; init; } = string.Empty; diff --git a/SushiBar/SushiBarDatabaseImplement/Implements/ImplementerStorage.cs b/SushiBar/SushiBarDatabaseImplement/Implements/ImplementerStorage.cs new file mode 100644 index 0000000..330d8fd --- /dev/null +++ b/SushiBar/SushiBarDatabaseImplement/Implements/ImplementerStorage.cs @@ -0,0 +1,81 @@ +using SushiBarContracts.BindingModels; +using SushiBarContracts.SearchModels; +using SushiBarContracts.StoragesContracts; +using SushiBarContracts.ViewModels; +using SushiBarDatabaseImplement.Models; + +namespace SushiBarDatabaseImplement.Implements; + +public class ImplementerStorage : IImplementerStorage +{ + public List GetFullList() + { + using var context = new SushiBarDatabase(); + return context.Implementers + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(ImplementerSearchModel? model) + { + if (model.Id.HasValue) + { + var res = GetElement(model); + return res != null ? new List { res } : new List(); + } + + if (model.ImplementerFio == null) return new List(); + using var context = new SushiBarDatabase(); + return context.Implementers + .Where(x => x.ImplementerFio.Equals(model.ImplementerFio)) + .Select(x => x.GetViewModel) + .ToList(); + } + + public ImplementerViewModel? GetElement(ImplementerSearchModel? model) + { + using var context = new SushiBarDatabase(); + if (model.Id.HasValue) + return context.Implementers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + if (model is { ImplementerFio: { }, Password: { } }) + return context.Implementers + .FirstOrDefault(x => x.ImplementerFio.Equals(model.ImplementerFio) + && x.Password.Equals(model.Password)) + ?.GetViewModel; + return model.ImplementerFio != null ? + context.Implementers + .FirstOrDefault(x => x.ImplementerFio.Equals(model.ImplementerFio))?.GetViewModel : + null; + } + + public ImplementerViewModel? Insert(ImplementerBindingModel model) + { + using var context = new SushiBarDatabase(); + var res = Implementer.Create(model); + if (res == null) return res?.GetViewModel; + context.Implementers.Add(res); + context.SaveChanges(); + return res?.GetViewModel; + } + + public ImplementerViewModel? Update(ImplementerBindingModel model) + { + using var context = new SushiBarDatabase(); + var res = context.Implementers + .FirstOrDefault(x => x.Id == model.Id); + if (res == null) return res?.GetViewModel; + res.Update(model); + context.SaveChanges(); + return res?.GetViewModel; + } + + public ImplementerViewModel? Delete(ImplementerBindingModel model) + { + using var context = new SushiBarDatabase(); + var res = context.Implementers.FirstOrDefault(x => x.Id == model.Id); + if (res == null) return res?.GetViewModel; + context.Implementers.Remove(res); + context.SaveChanges(); + return res?.GetViewModel; + } +} \ No newline at end of file diff --git a/SushiBar/SushiBarDatabaseImplement/Models/Implementer.cs b/SushiBar/SushiBarDatabaseImplement/Models/Implementer.cs new file mode 100644 index 0000000..72fa96e --- /dev/null +++ b/SushiBar/SushiBarDatabaseImplement/Models/Implementer.cs @@ -0,0 +1,64 @@ +using System.ComponentModel.DataAnnotations; +using SushiBarContracts.BindingModels; +using SushiBarContracts.ViewModels; +using SushiBarDataModels.Models; + +namespace SushiBarDatabaseImplement.Models; + +public class Implementer : IImplementerModel +{ + public int Id { get; private init; } + [Required] public string ImplementerFio { get; private set; } = string.Empty; + [Required] public string Password { get; private set; } = string.Empty; + public int WorkExperience { get; private set; } + public int Qualification { get; private set; } + + public static Implementer? Create(ImplementerBindingModel? model) + { + if (model == null) + return null; + + return new Implementer + { + Id = model.Id, + ImplementerFio = model.ImplementerFio, + Password = model.Password, + WorkExperience = model.WorkExperience, + Qualification = model.Qualification + }; + } + + public static Implementer Create(ImplementerViewModel model) + { + return new Implementer() + { + Id = model.Id, + ImplementerFio = model.ImplementerFio, + Password = model.Password, + WorkExperience = model.WorkExperience, + Qualification = model.Qualification + }; + } + + public void Update(ImplementerBindingModel? model) + { + if (model == null) + { + return; + } + + ImplementerFio = model.ImplementerFio; + Password = model.Password; + WorkExperience = model.WorkExperience; + Qualification = model.Qualification; + } + + public ImplementerViewModel GetViewModel => new() + { + Id = Id, + ImplementerFio = ImplementerFio, + Password = Password, + WorkExperience = WorkExperience, + Qualification = Qualification + }; +} \ No newline at end of file diff --git a/SushiBar/SushiBarDatabaseImplement/Models/Order.cs b/SushiBar/SushiBarDatabaseImplement/Models/Order.cs index 0c5e74a..772e110 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/Order.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/Order.cs @@ -15,6 +15,7 @@ namespace SushiBarDatabaseImplement.Models [Required] public int ClientId { get; private set; } + public int ImplementerId { get; private set; } public string SushiName { get; set; } = string.Empty; @@ -35,6 +36,8 @@ namespace SushiBarDatabaseImplement.Models public virtual Sushi Sushi { get; set; } public virtual Client Client { get; set; } + + public virtual Implementer? Implementer { get; private set; } public static Order? Create(OrderBindingModel? model) { @@ -49,6 +52,7 @@ namespace SushiBarDatabaseImplement.Models SushiId = model.SushiId, SushiName = model.SushiName, ClientId = model.ClientId, + ImplementerId = model.ImplementerId, Count = model.Count, Sum = model.Sum, Status = model.Status, @@ -67,6 +71,7 @@ namespace SushiBarDatabaseImplement.Models SushiId = model.SushiId; SushiName = model.SushiName; ClientId = model.ClientId; + ImplementerId = model.ImplementerId; Count = model.Count; Sum = model.Sum; Status = model.Status; @@ -85,10 +90,12 @@ namespace SushiBarDatabaseImplement.Models Count = Count, DateCreate = DateCreate, DateImplement = DateImplement, + ImplementerId = ImplementerId, Sum = Sum, Status = Status, ClientFio = context.Clients.FirstOrDefault(x => x.Id == ClientId)?.ClientFio ?? string.Empty, - SushiName = context.Sushi.FirstOrDefault(x => x.Id == SushiId)?.SushiName ?? string.Empty + SushiName = context.Sushi.FirstOrDefault(x => x.Id == SushiId)?.SushiName ?? string.Empty, + ImplementerFio = Implementer?.ImplementerFio ?? string.Empty }; } } } diff --git a/SushiBar/SushiBarDatabaseImplement/SushiBarDatabase.cs b/SushiBar/SushiBarDatabaseImplement/SushiBarDatabase.cs index 9b7ed37..6af51fc 100644 --- a/SushiBar/SushiBarDatabaseImplement/SushiBarDatabase.cs +++ b/SushiBar/SushiBarDatabaseImplement/SushiBarDatabase.cs @@ -18,5 +18,6 @@ namespace SushiBarDatabaseImplement public virtual DbSet SushiComponents { set; get; } public virtual DbSet Orders { set; get; } public virtual DbSet Clients { set; get; } + public virtual DbSet Implementers { get; set; } } } diff --git a/SushiBar/SushiBarFileImplement/DataFileSingleton.cs b/SushiBar/SushiBarFileImplement/DataFileSingleton.cs index 4e670de..ea43f81 100644 --- a/SushiBar/SushiBarFileImplement/DataFileSingleton.cs +++ b/SushiBar/SushiBarFileImplement/DataFileSingleton.cs @@ -9,9 +9,11 @@ namespace SushiBarFileImplement private readonly string ComponentFileName = "Component.xml"; private readonly string OrderFileName = "Order.xml"; private readonly string SushiFileName = "Sushi.xml"; + private readonly string ImplementerFileName = "Implementer.xml"; public List Components { get; private set; } public List Orders { get; private set; } public List Sushis { get; private set; } + public List Implementers { get; set; } public static DataFileSingleton GetInstance() { instance ??= new DataFileSingleton(); @@ -20,11 +22,14 @@ namespace SushiBarFileImplement public void SaveComponents() => SaveData(Components, ComponentFileName, "Components", x => x.GetXElement); public void SaveSushis() => SaveData(Sushis, SushiFileName, "Sushis", x => x.GetXElement); public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement); + public void SaveImplementers() => SaveData(Implementers, ImplementerFileName, "Implementers", x => x.GetXElement); + private DataFileSingleton() { - Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; - Sushis = LoadData(SushiFileName, "Sushi", x => Sushi.Create(x)!)!; - Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; + Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; + Sushis = LoadData(SushiFileName, "Sushi", x => Sushi.Create(x)!)!; + Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; + Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!; } private static List? LoadData(string filename, string xmlNodeName, Func selectFunction) { diff --git a/SushiBar/SushiBarFileImplement/Implements/ImplementerStorage.cs b/SushiBar/SushiBarFileImplement/Implements/ImplementerStorage.cs new file mode 100644 index 0000000..bf1d9c8 --- /dev/null +++ b/SushiBar/SushiBarFileImplement/Implements/ImplementerStorage.cs @@ -0,0 +1,89 @@ +using SushiBarContracts.BindingModels; +using SushiBarContracts.SearchModels; +using SushiBarContracts.StoragesContracts; +using SushiBarContracts.ViewModels; +using SushiBarFileImplement.Models; + +namespace SushiBarFileImplement.Implements; + +public class ImplementerStorage : IImplementerStorage +{ + private readonly DataFileSingleton _source; + public ImplementerStorage() + { + _source = DataFileSingleton.GetInstance(); + } + + public List GetFullList() + { + return _source.Implementers.Select(x => x.GetViewModel).ToList(); + } + + public List GetFilteredList(ImplementerSearchModel? model) + { + if (model == null) + { + return new List(); + } + if (model.Id.HasValue) + { + var res = GetElement(model); + return res != null ? + new List { res } : + new List(); + } + if (model.ImplementerFio != null) + { + return _source.Implementers + .Where(x => x.ImplementerFio.Equals(model.ImplementerFio)) + .Select(x => x.GetViewModel) + .ToList(); + } + return new List(); + } + + public ImplementerViewModel? GetElement(ImplementerSearchModel? model) + { + if (model.Id.HasValue) + return _source.Implementers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + if (model is { ImplementerFio: { }, Password: { } }) + return _source.Implementers + .FirstOrDefault(x => x.ImplementerFio.Equals(model.ImplementerFio) + && x.Password.Equals(model.Password)) + ?.GetViewModel; + return model.ImplementerFio != null ? + _source.Implementers + .FirstOrDefault(x => x.ImplementerFio.Equals(model.ImplementerFio))?.GetViewModel : + null; + } + + public ImplementerViewModel? Insert(ImplementerBindingModel model) + { + model.Id = _source.Implementers.Count > 0 ? + _source.Implementers.Max(x => x.Id) + 1 : + 1; + var res = Implementer.Create(model); + if (res == null) return res?.GetViewModel; + _source.Implementers.Add(res); + _source.SaveImplementers(); + return res?.GetViewModel; + } + + public ImplementerViewModel? Update(ImplementerBindingModel model) + { + var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id); + if (res == null) return res?.GetViewModel; + 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) return res?.GetViewModel; + _source.Implementers.Remove(res); + _source.SaveImplementers(); + return res?.GetViewModel; + } +} \ No newline at end of file diff --git a/SushiBar/SushiBarFileImplement/Models/Implementer.cs b/SushiBar/SushiBarFileImplement/Models/Implementer.cs new file mode 100644 index 0000000..282a53f --- /dev/null +++ b/SushiBar/SushiBarFileImplement/Models/Implementer.cs @@ -0,0 +1,77 @@ +using System.Xml.Linq; +using SushiBarContracts.BindingModels; +using SushiBarContracts.ViewModels; +using SushiBarDataModels.Models; + +namespace SushiBarFileImplement.Models; + +public class Implementer : IImplementerModel +{ + public int Id { get; private set; } + 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 static Implementer? Create(XElement? element) + { + if (element == null) + { + return null; + } + return new Implementer + { + ImplementerFio = element.Element("FIO")!.Value, + Password = element.Element("Password")!.Value, + Id = Convert.ToInt32(element.Attribute("Id")!.Value), + Qualification = Convert.ToInt32(element.Element("Qualification")!.Value), + WorkExperience = Convert.ToInt32(element.Element("WorkExperience")!.Value), + }; + } + + public static Implementer? Create(ImplementerBindingModel? model) + { + if (model == null) + { + return null; + } + return new Implementer + { + Id = model.Id, + Password = model.Password, + Qualification = model.Qualification, + ImplementerFio = model.ImplementerFio, + WorkExperience = model.WorkExperience, + }; + } + + + + public void Update(ImplementerBindingModel? model) + { + if (model == null) + { + return; + } + Password = model.Password; + Qualification = model.Qualification; + ImplementerFio = model.ImplementerFio; + WorkExperience = model.WorkExperience; + } + + public ImplementerViewModel GetViewModel => new() + { + Id = Id, + Password = Password, + Qualification = Qualification, + ImplementerFio = ImplementerFio, + }; + + public XElement GetXElement => new("Client", + new XAttribute("Id", Id), + new XElement("Password", Password), + new XElement("FIO", ImplementerFio), + new XElement("Qualification", Qualification), + new XElement("WorkExperience", WorkExperience) + ); +} \ No newline at end of file diff --git a/SushiBar/SushiBarFileImplement/Models/Order.cs b/SushiBar/SushiBarFileImplement/Models/Order.cs index 51796bc..91213c5 100644 --- a/SushiBar/SushiBarFileImplement/Models/Order.cs +++ b/SushiBar/SushiBarFileImplement/Models/Order.cs @@ -12,6 +12,7 @@ namespace SushiBarFileImplement.Models public string SushiName { get; private set; } = string.Empty; public int SushiId { get; private set; } public int ClientId { get; } + public int ImplementerId { get; set; } public int Count { get; private set; } public double Sum { get; private set; } public OrderStatus Status { get; private set; } = OrderStatus.Unknown; @@ -29,6 +30,7 @@ namespace SushiBarFileImplement.Models Id = model.Id, SushiId = model.SushiId, SushiName = model.SushiName, + ImplementerId = model.ImplementerId, Count = model.Count, Sum = model.Sum, Status = model.Status, @@ -51,6 +53,7 @@ namespace SushiBarFileImplement.Models Count = Convert.ToInt32(element.Element("Count")!.Value), Sum = Convert.ToDouble(element.Element("Sum")!.Value), Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value), + ImplementerId = Convert.ToInt32(element.Element("ImplementerId")!.Value), DateCreate = DateTime.ParseExact(element.Element("DateCreate")!.Value, "G", null) }; @@ -67,6 +70,7 @@ namespace SushiBarFileImplement.Models } SushiId = model.SushiId; SushiName = model.SushiName; + ImplementerId = model.ImplementerId; Count = model.Count; Sum = model.Sum; Status = model.Status; @@ -78,6 +82,9 @@ namespace SushiBarFileImplement.Models Id = Id, SushiId = SushiId, SushiName = SushiName, + ImplementerFio = DataFileSingleton.GetInstance() + .Implementers + .FirstOrDefault(x => x.Id == ImplementerId)?.ImplementerFio ?? string.Empty, Count = Count, Sum = Sum, Status = Status, @@ -89,6 +96,7 @@ namespace SushiBarFileImplement.Models new XAttribute("Id", Id), new XElement("SushiName", SushiName), new XElement("SushiId", SushiId.ToString()), + new XElement("ImplementerId", ImplementerId), new XElement("Count", Count.ToString()), new XElement("Sum", Sum.ToString()), new XElement("Status", Status.ToString()), diff --git a/SushiBar/SushiBarModels/Models/IImplementerModel.cs b/SushiBar/SushiBarModels/Models/IImplementerModel.cs new file mode 100644 index 0000000..8326da8 --- /dev/null +++ b/SushiBar/SushiBarModels/Models/IImplementerModel.cs @@ -0,0 +1,9 @@ +namespace SushiBarDataModels.Models; + +public interface IImplementerModel : IId +{ + string ImplementerFio { get; } + string Password { get; } + int WorkExperience { get; } + int Qualification { get; } +} \ No newline at end of file diff --git a/SushiBar/SushibarListImplement/DataListSingleton.cs b/SushiBar/SushibarListImplement/DataListSingleton.cs index 2ec96c9..fe4b45b 100644 --- a/SushiBar/SushibarListImplement/DataListSingleton.cs +++ b/SushiBar/SushibarListImplement/DataListSingleton.cs @@ -8,11 +8,14 @@ namespace SushibarListImplement public List Components { get; set; } public List Orders { get; set; } public List Sushi { get; set; } + public List Implementers { get; set; } + private DataListSingleton() { Components = new List(); Orders = new List(); Sushi = new List(); + Implementers = new List(); } public static DataListSingleton GetInstance() { diff --git a/SushiBar/SushibarListImplement/Implements/ImplementerStorage.cs b/SushiBar/SushibarListImplement/Implements/ImplementerStorage.cs new file mode 100644 index 0000000..2801d90 --- /dev/null +++ b/SushiBar/SushibarListImplement/Implements/ImplementerStorage.cs @@ -0,0 +1,106 @@ +using SushiBarContracts.BindingModels; +using SushiBarContracts.SearchModels; +using SushiBarContracts.StoragesContracts; +using SushiBarContracts.ViewModels; +using SushibarListImplement.Models; + +namespace SushibarListImplement.Implements; + +public class ImplementerStorage : IImplementerStorage +{ + private readonly DataListSingleton _source; + public ImplementerStorage() + { + _source = DataListSingleton.GetInstance(); + } + + public ImplementerViewModel? Delete(ImplementerBindingModel model) + { + for (var i = 0; i < _source.Implementers.Count; ++i) + { + if (_source.Implementers[i].Id != model.Id) continue; + var element = _source.Implementers[i]; + _source.Implementers.RemoveAt(i); + return element.GetViewModel; + } + return null; + } + + public ImplementerViewModel? GetElement(ImplementerSearchModel model) + { + foreach (var x in _source.Implementers) + { + if (model.Id.HasValue && x.Id == model.Id) + return x.GetViewModel; + if (model.ImplementerFio != null && model.Password != null && + x.ImplementerFio.Equals(model.ImplementerFio) && x.Password.Equals(model.Password)) + return x.GetViewModel; + if (model.ImplementerFio != null && x.ImplementerFio.Equals(model.ImplementerFio)) + return x.GetViewModel; + } + return null; + } + + public List GetFilteredList(ImplementerSearchModel model) + { + if (model.Id.HasValue) + { + var res = GetElement(model); + return res != null ? + new List { res } : + new List(); + } + + List result = new(); + if (model.ImplementerFio == null) return result; + foreach (var implementer in _source.Implementers) + { + if (implementer.ImplementerFio.Equals(model.ImplementerFio)) + { + result.Add(implementer.GetViewModel); + } + } + return result; + } + + public List GetFullList() + { + var result = new List(); + foreach (var implementer in _source.Implementers) + { + result.Add(implementer.GetViewModel); + } + return result; + } + + public ImplementerViewModel? Insert(ImplementerBindingModel model) + { + model.Id = 1; + foreach (var implementer in _source.Implementers) + { + if (model.Id <= implementer.Id) + { + model.Id = implementer.Id + 1; + } + } + var res = Implementer.Create(model); + if (res != null) + { + _source.Implementers.Add(res); + } + return res?.GetViewModel; + } + + public ImplementerViewModel? Update(ImplementerBindingModel model) + { + foreach (var implementer in _source.Implementers) + { + if (implementer.Id == model.Id) + { + implementer.Update(model); + return implementer.GetViewModel; + } + } + return null; + } +} \ No newline at end of file diff --git a/SushiBar/SushibarListImplement/Models/Implementer.cs b/SushiBar/SushibarListImplement/Models/Implementer.cs new file mode 100644 index 0000000..6b36a95 --- /dev/null +++ b/SushiBar/SushibarListImplement/Models/Implementer.cs @@ -0,0 +1,42 @@ +using SushiBarContracts.BindingModels; +using SushiBarContracts.ViewModels; +using SushiBarDataModels.Models; + +namespace SushibarListImplement.Models; + +public class Implementer : IImplementerModel +{ + public int Id { get; set; } + public string ImplementerFio { get; set; } + public string Password { get; set; } + public int WorkExperience { get; set; } + public int Qualification { get; set; } + + public static Implementer? Create(ImplementerBindingModel model) + { + return new Implementer + { + Id = model.Id, + Password = model.Password, + Qualification = model.Qualification, + ImplementerFio = model.ImplementerFio, + WorkExperience = model.WorkExperience, + }; + } + + public void Update(ImplementerBindingModel model) + { + Password = model.Password; + Qualification = model.Qualification; + ImplementerFio = model.ImplementerFio; + WorkExperience = model.WorkExperience; + } + + public ImplementerViewModel GetViewModel => new() + { + Id = Id, + Password = Password, + Qualification = Qualification, + ImplementerFio = ImplementerFio, + }; +} \ No newline at end of file