From 292685babe477b2f2d9e5543b1e3dbc4e16b8ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=91=D0=B0=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D1=81=D0=BA=D0=B0=D1=8F?= Date: Fri, 17 May 2024 21:19:15 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20DataContract=20=D0=BD=D0=B0=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D1=8B-=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20=20=D0=B8?= =?UTF-8?q?=20DataMember=20=D0=BD=D0=B0=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81?= =?UTF-8?q?=D1=82=D0=B2=D0=B0=20=D1=8D=D1=82=D0=B8=D1=85=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=81=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=B0=D1=85=20=D0=B8=20=D0=B2=20=D0=B1=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BindingModel/BackUpSaveBinidngModel.cs | 7 ++++ .../BusinessLogicsContracts/IBackUpLogic.cs | 9 +++++ .../StoragesContracts/IBackUpInfo.cs | 8 ++++ .../Implements/BackUpInfo.cs | 27 +++++++++++++ SushiBarDatabaseImplement/Models/Client.cs | 10 +++-- SushiBarDatabaseImplement/Models/Component.cs | 8 ++++ .../Models/Implementer.cs | 13 +++--- .../Models/MessageInfo.cs | 8 ++++ SushiBarDatabaseImplement/Models/Order.cs | 19 +++++++-- SushiBarDatabaseImplement/Models/Sushi.cs | 10 +++++ .../Models/SushiComponent.cs | 11 +++++ .../Implements/BackUpInfo.cs | 40 +++++++++++++++++++ SushiBarFileImplement/Models/Client.cs | 9 +++++ SushiBarFileImplement/Models/Component.cs | 7 ++++ SushiBarFileImplement/Models/Implementer.cs | 11 +++++ SushiBarFileImplement/Models/MessageInfo.cs | 8 ++++ SushiBarFileImplement/Models/Order.cs | 19 +++++++++ SushiBarFileImplement/Models/Sushi.cs | 9 +++++ 18 files changed, 221 insertions(+), 12 deletions(-) create mode 100644 SushiBarContracts/BindingModel/BackUpSaveBinidngModel.cs create mode 100644 SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs create mode 100644 SushiBarContracts/StoragesContracts/IBackUpInfo.cs create mode 100644 SushiBarDatabaseImplement/Implements/BackUpInfo.cs create mode 100644 SushiBarFileImplement/Implements/BackUpInfo.cs diff --git a/SushiBarContracts/BindingModel/BackUpSaveBinidngModel.cs b/SushiBarContracts/BindingModel/BackUpSaveBinidngModel.cs new file mode 100644 index 0000000..b672379 --- /dev/null +++ b/SushiBarContracts/BindingModel/BackUpSaveBinidngModel.cs @@ -0,0 +1,7 @@ +namespace SushiBarContracts.BindingModel +{ + public class BackUpSaveBinidngModel + { + public string FolderName { get; set; } = string.Empty; + } +} diff --git a/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs b/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs new file mode 100644 index 0000000..7101974 --- /dev/null +++ b/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs @@ -0,0 +1,9 @@ +using SushiBarContracts.BindingModel; + +namespace SushiBarContracts.BusinessLogicsContracts +{ + public interface IBackUpLogic + { + void CreateBackUp(BackUpSaveBinidngModel model); + } +} diff --git a/SushiBarContracts/StoragesContracts/IBackUpInfo.cs b/SushiBarContracts/StoragesContracts/IBackUpInfo.cs new file mode 100644 index 0000000..a58249e --- /dev/null +++ b/SushiBarContracts/StoragesContracts/IBackUpInfo.cs @@ -0,0 +1,8 @@ +namespace SushiBarContracts.StoragesContracts +{ + public interface IBackUpInfo + { + List? GetList() where T : class, new(); + Type? GetTypeByModelInterface(string modelInterfaceName); + } +} diff --git a/SushiBarDatabaseImplement/Implements/BackUpInfo.cs b/SushiBarDatabaseImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..712ae1e --- /dev/null +++ b/SushiBarDatabaseImplement/Implements/BackUpInfo.cs @@ -0,0 +1,27 @@ +using SushiBarContracts.StoragesContracts; + +namespace SushiBarDatabaseImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + using var context = new SushiBarDatabase(); + return context.Set().ToList(); + } + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + var assembly = typeof(BackUpInfo).Assembly; + var types = assembly.GetTypes(); + foreach (var type in types) + { + if (type.IsClass && + type.GetInterface(modelInterfaceName) != null) + { + return type; + } + } + return null; + } + } +} diff --git a/SushiBarDatabaseImplement/Models/Client.cs b/SushiBarDatabaseImplement/Models/Client.cs index e911434..506aee9 100644 --- a/SushiBarDatabaseImplement/Models/Client.cs +++ b/SushiBarDatabaseImplement/Models/Client.cs @@ -3,24 +3,28 @@ using SushiBarContracts.ViewModels; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; using SushiBarDataModels; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Client : IClientModel { + [DataMember] public int Id { get; private set; } + [DataMember] [Required] public string ClientFIO { get; private set; } = string.Empty; - + + [DataMember] [Required] public string Email { get; private set; } = string.Empty; + [DataMember] [Required] public string Password { get; private set; } = string.Empty; - [Required] - [ForeignKey("ClientId")] public virtual List Orders { get; set; } = new(); diff --git a/SushiBarDatabaseImplement/Models/Component.cs b/SushiBarDatabaseImplement/Models/Component.cs index e394f9a..acbb8e5 100644 --- a/SushiBarDatabaseImplement/Models/Component.cs +++ b/SushiBarDatabaseImplement/Models/Component.cs @@ -3,16 +3,24 @@ using System.ComponentModel.DataAnnotations; using SushiBarDataModels.Models; using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Component : IComponentModel { + [DataMember] public int Id { get; private set; } + + [DataMember] [Required] public string ComponentName { get; private set; } = string.Empty; + + [DataMember] [Required] public double Cost { get; set; } + [ForeignKey("ComponentId")] public virtual List SushiComponents { get; set; } = new(); public static Component? Create(ComponentBindingModel model) diff --git a/SushiBarDatabaseImplement/Models/Implementer.cs b/SushiBarDatabaseImplement/Models/Implementer.cs index 241ca9c..96f3ead 100644 --- a/SushiBarDatabaseImplement/Models/Implementer.cs +++ b/SushiBarDatabaseImplement/Models/Implementer.cs @@ -1,33 +1,34 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels; -using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Implementer : IImplementerModel { + [DataMember] public int Id { get; private set; } + [DataMember] [Required] public string ImplementerFIO { get; private set; } = string.Empty; + [DataMember] [Required] public string Password { get; private set; } = string.Empty; + [DataMember] [Required] public int WorkExperience { get; private set; } + [DataMember] [Required] public int Qualification { get; private set; } - [Required] [ForeignKey("ImplementerId")] public virtual List Orders { get; set; } = new(); diff --git a/SushiBarDatabaseImplement/Models/MessageInfo.cs b/SushiBarDatabaseImplement/Models/MessageInfo.cs index 989ec72..f6c558e 100644 --- a/SushiBarDatabaseImplement/Models/MessageInfo.cs +++ b/SushiBarDatabaseImplement/Models/MessageInfo.cs @@ -2,25 +2,33 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class MessageInfo : IMessageInfoModel { + [DataMember] [Key] public string MessageId { get; set; } = string.Empty; + [DataMember] public int? ClientId { get; set; } + [DataMember] [Required] public string SenderName { get; set; } = string.Empty; + [DataMember] [Required] public DateTime DateDelivery { get; set; } = DateTime.Now; + [DataMember] [Required] public string Subject { get; set; } = string.Empty; + [DataMember] [Required] public string Body { get; set; } = string.Empty; diff --git a/SushiBarDatabaseImplement/Models/Order.cs b/SushiBarDatabaseImplement/Models/Order.cs index 9a7247d..b4a7ec3 100644 --- a/SushiBarDatabaseImplement/Models/Order.cs +++ b/SushiBarDatabaseImplement/Models/Order.cs @@ -3,33 +3,46 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels; using SushiBarDataModels.Enums; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Order : IOrderModel { + [DataMember] public int Id { get; set; } + [DataMember] [Required] public int SushiId { get; set; } + [DataMember] [Required] public int ClientId { get; set; } - + + [DataMember] public int? ImplementerId { get; set; } + [DataMember] [Required] public int Count { get; set; } + [DataMember] [Required] public double Sum { get; set; } + [DataMember] [Required] public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; + [DataMember] [Required] public DateTime DateCreate { get; set; } = DateTime.Now; + + [DataMember] public DateTime? DateImplement { get; set; } + public virtual Client? Client { get; set; } public virtual Implementer? Implementer { get; set; } public virtual Sushi? Sushi { get; set; } @@ -53,7 +66,7 @@ namespace SushiBarDatabaseImplement.Models ImplementerId = model.ImplementerId, }; } - + public void Update(OrderBindingModel model) { if (model == null) @@ -74,7 +87,7 @@ namespace SushiBarDatabaseImplement.Models DateCreate = DateCreate, DateImplement = DateImplement, ClientId = ClientId, - ImplementerId =ImplementerId, + ImplementerId = ImplementerId, SushiName = Sushi?.SushiName ?? string.Empty, ClientFIO = Client?.ClientFIO ?? string.Empty, ImplementerFIO = Implementer?.ImplementerFIO ?? string.Empty diff --git a/SushiBarDatabaseImplement/Models/Sushi.cs b/SushiBarDatabaseImplement/Models/Sushi.cs index 9e3a64e..960a047 100644 --- a/SushiBarDatabaseImplement/Models/Sushi.cs +++ b/SushiBarDatabaseImplement/Models/Sushi.cs @@ -3,18 +3,28 @@ using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Sushi : ISushiModel { + [DataMember] public int Id { get; set; } + + [DataMember] [Required] public string SushiName { get; set; } = string.Empty; + + [DataMember] [Required] public double Price { get; set; } + private Dictionary? _sushiComponents = null; + + [DataMember] [NotMapped] public Dictionary SushiComponents { diff --git a/SushiBarDatabaseImplement/Models/SushiComponent.cs b/SushiBarDatabaseImplement/Models/SushiComponent.cs index 60c93fa..2a470de 100644 --- a/SushiBarDatabaseImplement/Models/SushiComponent.cs +++ b/SushiBarDatabaseImplement/Models/SushiComponent.cs @@ -1,18 +1,29 @@ using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class SushiComponent { + [DataMember] public int Id { get; set; } + + [DataMember] [Required] public int SushiId { get; set; } + + [DataMember] [Required] public int ComponentId { get; set; } + + [DataMember] [Required] public int Count { get; set; } + public virtual Component Component { get; set; } = new(); + public virtual Sushi Sushi { get; set; } = new(); } diff --git a/SushiBarFileImplement/Implements/BackUpInfo.cs b/SushiBarFileImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..507e2c1 --- /dev/null +++ b/SushiBarFileImplement/Implements/BackUpInfo.cs @@ -0,0 +1,40 @@ +using SushiBarContracts.StoragesContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SushiBarFileImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + private readonly DataFileSingleton _fileSingleton; + + public BackUpInfo() + { + _fileSingleton = DataFileSingleton.GetInstance(); + } + + public List? GetList() where T : class, new() + { + return (List?)_fileSingleton.GetType().GetProperties() + .FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == typeof(T)) + ?.GetValue(_fileSingleton); + } + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + var assembly = typeof(BackUpInfo).Assembly; + var types = assembly.GetTypes(); + foreach (var type in types) + { + if (type.IsClass && + type.GetInterface(modelInterfaceName) != null) + { + return type; + } + } + return null; + } + } +} diff --git a/SushiBarFileImplement/Models/Client.cs b/SushiBarFileImplement/Models/Client.cs index 5a837bd..62c2ff0 100644 --- a/SushiBarFileImplement/Models/Client.cs +++ b/SushiBarFileImplement/Models/Client.cs @@ -1,15 +1,24 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class Client : IClientModel { + [DataMember] public int Id { get; private set; } + + [DataMember] public string ClientFIO { get; private set; } = string.Empty; + + [DataMember] public string Email { get; private set; } = string.Empty; + + [DataMember] public string Password { get; private set; } = string.Empty; public static Client? Create(ClientBindingModel model) { diff --git a/SushiBarFileImplement/Models/Component.cs b/SushiBarFileImplement/Models/Component.cs index 3b722c6..4158a90 100644 --- a/SushiBarFileImplement/Models/Component.cs +++ b/SushiBarFileImplement/Models/Component.cs @@ -1,14 +1,21 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class Component : IComponentModel { + [DataMember] public int Id { get; private set; } + + [DataMember] public string ComponentName { get; private set; } = string.Empty; + + [DataMember] public double Cost { get; set; } public static Component? Create(ComponentBindingModel model) { diff --git a/SushiBarFileImplement/Models/Implementer.cs b/SushiBarFileImplement/Models/Implementer.cs index c8f5734..ef8ee2e 100644 --- a/SushiBarFileImplement/Models/Implementer.cs +++ b/SushiBarFileImplement/Models/Implementer.cs @@ -4,18 +4,29 @@ using SushiBarDataModels; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class Implementer : IImplementerModel { + [DataMember] public int Id { get; private set; } + + [DataMember] public string ImplementerFIO { get; private set; } = string.Empty; + + [DataMember] public string Password { get; private set; } = string.Empty; + + [DataMember] public int WorkExperience { get; private set; } + + [DataMember] public int Qualification { get; private set; } public static Implementer? Create(ImplementerBindingModel model) { diff --git a/SushiBarFileImplement/Models/MessageInfo.cs b/SushiBarFileImplement/Models/MessageInfo.cs index a6052b9..750ded9 100644 --- a/SushiBarFileImplement/Models/MessageInfo.cs +++ b/SushiBarFileImplement/Models/MessageInfo.cs @@ -1,22 +1,30 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class MessageInfo : IMessageInfoModel { + [DataMember] public string MessageId { get; set; } = string.Empty; + [DataMember] public int? ClientId { get; set; } + [DataMember] public string SenderName { get; set; } = string.Empty; + [DataMember] public DateTime DateDelivery { get; set; } = DateTime.Now; + [DataMember] public string Subject { get; set; } = string.Empty; + [DataMember] public string Body { get; set; } = string.Empty; public static MessageInfo? Create(MessageInfoBindingModel model) diff --git a/SushiBarFileImplement/Models/Order.cs b/SushiBarFileImplement/Models/Order.cs index cedea01..329d903 100644 --- a/SushiBarFileImplement/Models/Order.cs +++ b/SushiBarFileImplement/Models/Order.cs @@ -2,20 +2,39 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels; using SushiBarDataModels.Enums; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class Order : IOrderModel { + [DataMember] public int Id { get; private set; } + + [DataMember] public int SushiId { get; private set; } + + [DataMember] public int ClientId { get; private set; } + + [DataMember] public int? ImplementerId { get; private set; } + + [DataMember] public int Count { get; private set; } + + [DataMember] public double Sum { get; private set; } + + [DataMember] public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; + + [DataMember] public DateTime DateCreate { get; private set; } = DateTime.Now; + + [DataMember] public DateTime? DateImplement { get; private set; } public static Order? Create(OrderBindingModel? model) { diff --git a/SushiBarFileImplement/Models/Sushi.cs b/SushiBarFileImplement/Models/Sushi.cs index 7de8910..bef7781 100644 --- a/SushiBarFileImplement/Models/Sushi.cs +++ b/SushiBarFileImplement/Models/Sushi.cs @@ -1,18 +1,27 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class Sushi : ISushiModel { + [DataMember] public int Id { get; private set; } + + [DataMember] public string SushiName { get; private set; } = string.Empty; + + [DataMember] public double Price { get; private set; } public Dictionary Components { get; private set; } = new(); private Dictionary? _sushiComponents = null; + + [DataMember] public Dictionary SushiComponents { get